Этап 5 — панель (дашборд смысла)
Статус: ✅ РЕАЛИЗОВАНО (2026-09-14) Цель: единая сводка по атомам, версиям, каналам, доходу и графу.
Запуск
python3 stage5/panel.py --all # всё: проекты + cost + граф
python3 stage5/panel.py --project rabota-ufa # только проект
python3 stage5/panel.py --graph # только граф (AGE)
Что показывает
- projects — атомы по проектам (типы: claim/instruction/stat/qa), версии под каналы (web_article/telegram), активные каналы (newsletter/podcast/youtube).
- cost — стоимость запусков (
runs, stage=embed) + доход по каналам (publications.metrics.revenue). - graph — AGE-граф: вершины/рёбра (подсчёт из AGE), типы связей (duplicate), connected components (Union-Find из Postgres).
Дизайн
- Минимальная версия — один Python-скрипт, без FastAPI/React (это отдельный V5).
- Источник истины — Postgres (atom_relations для связей/компонентов); AGE — только подсчёт вершин/рёбер (agtype не выводится в psql).
- Идемпотентно — только чтение, никаких записей.
Ключевой факт
agtype-колонки AGE не отображаются в psql-выводе (известная проблема). Поэтому типы связей и connected components читаются из Postgres, а из AGE — только count(*) вершин/рёбер.