О проекте
Команда: Aman AI
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт
Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)
Суть
AML-инструмент: детерминированный Python-пайплайн по трём parquet строит граф переводов, назначает 6 ролей, считает приоритет и сообщества и формирует обязательные CSV. React-интерфейс показывает граф, а опциональный AI Investigator исследует уже рассчитанные факты.
Как устроено
main.py проверяет схему и согласованность рёбер с транзакциями, строит направленный граф NetworkX и считает объёмы, степени, PageRank, betweenness, достижимость от seed и календарные признаки. Сообщества Louvain ищутся на взвешенной неориентированной проекции, затем отдельно рассчитываются role_score и priority_score и детерминированные текстовые обоснования. Экспортёр готовит project-data.json для React с react-force-graph-2d. AI-чат на OpenAI Responses API работает с инструментами расследования, а NVIDIA API может выступать критиком ответа.
Ключевые решения
- NetworkX
- PageRank
- betweenness
- Louvain
- seed convergence
- rule-based roles
- grounding
- LLM critic
- function calling
Особенности
Детерминизм проверяется автоматически: Docker-сборка дважды запускает пайплайн и побайтово сравнивает обязательные CSV. Второй провайдер (NVIDIA) используется как критик ответа. В .codex/skills лежат скиллы под каждый модуль (role-engine, priority-engine, seed-convergence) для разработки с агентами.
Стек
Python · pandas · PyArrow · NetworkX · SciPy · FastAPI · TypeScript · React · Vite · Tailwind CSS · shadcn/Radix · Zod · react-force-graph-2d · Docker Compose · pytest · Vitest · Playwright
Модели
OpenAI Responses API · NVIDIA API (критик)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-7cf34f56-aman-ai.
README
README.mdMoneyGraph Investigator
MoneyGraph Investigator — проект команды Aman AI для кейса HackAlem AI «Граф денег». Это инструмент для AML-аналитика: он помогает понять, какие узлы в обезличенном графе переводов стоит изучить в первую очередь и на каких наблюдаемых данных основана эта рекомендация.
Проект не определяет виновность и не устанавливает связи с преступной деятельностью. Роли, приоритеты и сообщества — объяснимые гипотезы для дальнейшей проверки аналитиком.
Какую проблему решает проект
В крупном графе переводов сложно вручную увидеть точки концентрации, распределения, транзита и структурно важные связи. MoneyGraph строит направленный граф из выгрузки, рассчитывает признаки для каждого клиента, формирует список приоритетных узлов и даёт аналитику возможность проверить основания через интерактивный граф.
Целевая аудитория — аналитики финансового мониторинга и жюри хакатона, которым нужно воспроизводимо проверить расчёт и результат на предоставленном датасете.
Что реализовано
- Воспроизводимый Python-pipeline: валидация трёх Parquet-файлов, построение направленного графа и создание обязательных CSV.
- Шесть объяснимых функциональных ролей:
consolidator,transit,distributor,terminal,coordinator,peripheral. - Отдельные
role_scoreиpriority_score: совпадение с ролью не смешивается с полезностью узла для проверки. - Расчёт входящих и исходящих наблюдаемых объёмов, степеней, PageRank, betweenness, достижимости от seed-узлов, сообществ Louvain и календарных признаков.
- Детерминированные текстовые обоснования для каждого узла и топ-20 приоритетных кандидатов.
- Интерактивный React-интерфейс: поиск по GID, карточка клиента, фильтры, направленные связи, локальный обход на 1–4 шага, сообщества и экспорт наблюдаемых переводов в CSV.
- Предупреждения о границе наблюдения на глубине 4 и неполноте входящих потоков seed-узлов.
- Опциональные FastAPI и AI Investigator для исследования уже рассчитанных фактов. Они не меняют роли, оценки, кластеры или обязательные CSV.
- Docker Compose для запуска одной командой без локальной установки Python или Node.js.
Для включённого датасета pipeline формирует 2 248 узлов, 3 119 направленных рёбер, 4 840 транзакций, 65 сообществ и топ-20 узлов. Это характеристики конкретной выгрузки, а не показатель точности выявления нарушений.
Как работает решение
- Пользователь помещает в
data/три исходных Parquet-файла или использует уже включённые в репозиторий. main.pyпроверяет схему, GID, суммы, даты и согласованность агрегированных рёбер с транзакциями.- Pipeline строит направленный граф и рассчитывает структурные, объёмные, календарные и seed-признаки.
- На взвешенной неориентированной проекции находятся сообщества Louvain; далее рассчитываются роли, приоритеты и обоснования.
- Результаты сохраняются в
results/как обязательные CSV и вспомогательные JSON-артефакты. - Экспортёр готовит
project-data.jsonиз результатов и исходных узлов/рёбер, после чего React-интерфейс показывает граф и карточки. - Аналитик выбирает узел из списка приоритетов или вводит GID, изучает наблюдаемые связи, численные основания, кластер и ограничения данных.
flowchart LR
A["data/*.parquet"] --> B["Python: валидация и граф"]
B --> C["Метрики, seed-достижимость, Louvain, календарные признаки"]
C --> D["Роли, приоритет, evidence"]
D --> E["results/*.csv и JSON"]
E --> F["Экспортёр project-data.json"]
F --> G["React-интерфейс"]
E --> H["Опциональный FastAPI"]
G --> I["Опциональный AI-помощник"]
H --> I
Архитектура
| Компонент | Ответственность |
|---|---|
main.py | Запускает детерминированный аналитический pipeline и записывает результаты. |
apps/backend/moneygraph/ | Валидация, граф, признаки, seed-конвергенция, сообщества, роли, приоритет, evidence и продуктовые JSON. |
results/ | Обязательные CSV, карточки узлов, направленный граф и диагностика. |
apps/frontend/ | React-интерфейс, подготовка project-данных, просмотр графа и сервер AI-помощника. |
apps/backend/moneygraph/api.py | Опциональный FastAPI, который раздаёт уже рассчитанные артефакты. |
Dockerfile и docker-compose.yml | Сборка pipeline и интерфейса, запуск production-сервера. |
Обязательный путь не зависит от API, AI, базы данных, GPU или интернет-соединения после установки зависимостей. Docker-сборка использует интернет только для скачивания базовых образов и пакетов при первой сборке.
Технологии
| Область | Используемые технологии |
|---|---|
| Аналитика | Python, pandas, PyArrow, NetworkX, SciPy, NumPy |
| Вход и результаты | Parquet, UTF-8 CSV, JSON |
| Backend API | FastAPI, Uvicorn, Pydantic |
| Интерфейс | TypeScript, React, Vite, Tailwind CSS, shadcn/Radix, Zod |
| Визуализация | react-force-graph-2d, Canvas |
| AI, опционально | OpenAI Responses API и официальный SDK openai; NVIDIA API может выступать дополнительным критиком ответа |
| Проверки | pytest, Vitest, Oxlint, Playwright MCP |
| Развёртывание | Docker, Docker Compose; в репозитории есть Render Blueprint, но опубликованной версии нет |
Точные версии зависимостей закреплены в requirements.txt, apps/backend/requirements.txt и apps/frontend/package.json.
Данные и интеграции
Источник данных — обезличенный датасет организаторов. Требуются следующие файлы:
data/
├── nodes.parquet # gid, depth, is_seed
├── edges.parquet # src, dst, sum_kzt, n_tx, depth
└── transactions.parquet # src, dst, date, sum_kzt
edges.parquet — канонический источник структуры, направлений и агрегированных объёмов. transactions.parquet используется для проверки агрегатов и календарных признаков. Описание датасета находится в starter/READ_2.md.
На границе Python, JSON и JavaScript GID передаются строками: идентификаторы могут быть больше безопасного диапазона JavaScript number.
Основной сценарий не требует внешних сервисов. OpenAI и NVIDIA используются только при явной настройке ключей в окружении сервера. Подключений к банковским системам, внешним персональным данным или внешним базам данных нет.
Установка и запуск
Быстрый запуск для жюри через Docker
Нужны Docker Engine и Docker Compose v2. В терминале перейдите в корень репозитория и выполните:
cd /путь/к/hack-7cf34f56-aman-ai
docker compose up --build -d --wait --wait-timeout 120
После успешного health check откройте http://localhost:8080.
Команда внутри образа устанавливает зависимости, дважды запускает main.py, сравнивает обязательные CSV побайтово, готовит данные интерфейса и собирает production-версию. Локальные Python, Node.js и AI-ключи не требуются. Docker Compose публикует сервис только на 127.0.0.1.
Если порт занят, задайте другой перед запуском:
MONEYGRAPH_PORT=8081 docker compose up --build -d --wait --wait-timeout 120
Тогда откройте http://localhost:8081.
Остановить приложение:
docker compose down
Извлечь обязательные CSV из работающего контейнера:
mkdir -p results
mkdir results/docker
docker compose cp moneygraph:/app/results/. results/docker/
Подробности о Docker и подготовленном Render Blueprint — в docs/deployment.md.
Локальный запуск без Docker
Нужны Python 3.12+ (кроме 3.14.1), Node.js 22.18+ и npm. Самый простой вариант:
python3 scripts/run-local.py
Скрипт создаёт .venv, устанавливает зависимости, дважды запускает pipeline, сравнивает хеши CSV, собирает интерфейс и открывает сервер на http://127.0.0.1:5173.
Для ручного запуска аналитики:
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python main.py
После расчёта запустите интерфейс:
npm --prefix apps/frontend ci
npm --prefix apps/frontend run dev -- --host 127.0.0.1
Откройте http://127.0.0.1:5173. Перед dev и build экспортёр проверяет результат и готовит локальный apps/frontend/public/project-data.json.
Результаты pipeline
| Файл | Содержимое |
|---|---|
results/nodes_roles.csv | GID, роль, оценка роли, кластер, приоритет и evidence для каждого узла. |
results/clusters.csv | Сводка по сообществам. |
results/top_nodes.csv | Ранжированный топ-20 узлов для проверки. |
results/node_cards.json | Расширенные карточки узлов для API и исследовательских инструментов. |
results/graph.json | Направленный граф для продуктовой интеграции. |
results/analytics_diagnostics.json | Диагностические распределения и кандидаты. |
Как проверить решение
Сценарий для жюри
- Выполните Docker-команду из раздела выше и откройте
http://localhost:8080. - Убедитесь, что приложение загрузилось в режиме «Данные проекта».
- Откройте панель приоритетов и выберите первый узел. Сверьте его GID, роль и причину с первой строкой
results/top_nodes.csvиз контейнера или локальногоresults/. - В карточке переключите входящие, исходящие и все связи; проверьте обход на 1–4 шага и сводку кластера.
- Найдите GID
100000000404740100. Это узел глубины 4: интерфейс должен показать ограничение границы наблюдения, а отсутствие видимых исходящих связей не должно трактоваться как окончательная остановка средств. - Введите несуществующий GID, например
1, и проверьте понятное состояние «не найден».
Проверка детерминированности без Docker
После установки Python-зависимостей запустите:
.venv/bin/python main.py
shasum -a 256 results/nodes_roles.csv results/clusters.csv results/top_nodes.csv
.venv/bin/python main.py
shasum -a 256 results/nodes_roles.csv results/clusters.csv results/top_nodes.csv
Контрольные суммы трёх файлов после обоих запусков должны совпасть. scripts/run-local.py и Dockerfile выполняют эту проверку автоматически.
Автоматические проверки
# Backend
.venv/bin/python -m pip install -r apps/backend/requirements-dev.txt
PYTHONPATH=apps/backend .venv/bin/python -m pytest apps/backend/tests -q
# Frontend
npm --prefix apps/frontend run data:project
npm --prefix apps/frontend run lint
npm --prefix apps/frontend test
npm --prefix apps/frontend run test:agent
npm --prefix apps/frontend run build
npm --prefix apps/frontend run test:server
Для браузерной проверки требуется работающий локальный интерфейс и Chromium:
cd apps/frontend
npx playwright install chromium
QA_BASE_URL=http://localhost:8080/ npm run qa:project
Опциональные API и AI
После запуска main.py можно поднять аналитический API:
.venv/bin/python -m pip install -r apps/backend/requirements-api.txt
.venv/bin/python -m uvicorn moneygraph.api:app --app-dir apps/backend --host 127.0.0.1 --port 8000
Он отдаёт готовые результаты через /health, /api/top-nodes, /api/nodes/{gid}, /api/nodes/{gid}/subgraph, /api/clusters/{cluster_id} и /api/search. Контракт описан в docs/backend/frontend-handoff.md.
AI-помощник требует OPENAI_API_KEY в окружении процесса. По умолчанию используется модель gpt-4.1-mini, которую можно заменить переменной OPENAI_MODEL. NVIDIA-проверка включается отдельно через NVIDIA_API_KEY. Ключи не передаются в браузер и не нужны для детерминированного pipeline.
Ограничения
- Датасет покрывает наблюдаемые операции из предоставленной выгрузки. Входящие потоки seed-узлов могут быть неполными, а разность входящего и исходящего объёма не является балансом счёта.
- Глубина 4 — граница наблюдения. У таких узлов отсутствие исходящих рёбер не означает, что движение средств завершилось; они не получают роль
terminalтолько на этом основании. - В транзакциях есть календарная дата, но нет времени суток. Можно говорить о совпадении дат или интервале в календарных днях, но не о минутах или часах между операциями.
- У датасета нет размеченной истины для ролей. Результаты — объяснимые эвристики, поэтому проект не заявляет точность классификации или обнаружения нарушений.
- Основной интерфейс работает в режиме
projectчерез локально подготовленный JSON. FastAPI существует, однако его HTTP-контракт пока не является основным интеграционным путём React-интерфейса. - AI-функции зависят от ключей и доступности провайдеров; ответы ограничены рассчитанными инструментами и требуют проверки аналитиком.
- Для графов значительно большего размера потребуется другой графовый движок, приближённые метрики и выдача ограниченных подграфов вместо полного графа в браузер.
Размещённая версия
Подтверждённой deployed-версии и публичной ссылки в текущем репозитории нет. В проекте подготовлены Dockerfile, docker-compose.yml и render.yaml, но публикация на Render ещё не подтверждена.
Документация
Авторы коммитов
История коммитов
- 2026-09-23 17:57docker-sompose, readmeAdilet-tech
- 2026-09-23 17:44Merge remote-tracking branch 'origin/main'Atilla
- 2026-09-23 17:44feat: add protected deployment and browser investigation toolsAtilla
- 2026-09-23 17:35feat: add grounded MoneyGraph AI investigation chatAdilet-tech
- 2026-09-23 17:30fix frontendAtilla
- 2026-09-23 17:16add openai chatbot agentAtilla
- 2026-09-23 17:07Merge backend analytics with fullscreen frontendAtilla
- 2026-09-23 17:01add frontend v1Atilla
Все коммиты (19)
- 2026-09-23 16:51add frontendAtilla
- 2026-09-23 16:50frontend v0.4Atilla
- 2026-09-23 16:27feat: complete MoneyGraph backend and frontend API contractAdilet-tech
- 2026-09-23 15:56frontend v0.3Atilla
- 2026-09-23 15:12feat: implement deterministic MoneyGraph analytics pipelineAdilet-tech
- 2026-09-23 15:10frontend v0.1Atilla
- 2026-09-23 14:52frontend v0Atilla
- 2026-09-23 14:28docs: define MoneyGraph UI contract and frontend workflowAtilla
- 2026-09-23 14:12docs: add approved MoneyGraph designAdilet-tech
- 2026-09-23 13:32add dataAtilla
- 2026-09-23 13:28initial commitAtilla
Структура репозитория (240 файлов)
.codex/.gitkeep .codex/skills/frontend-design/.gitkeep .codex/skills/frontend-design/README.md .codex/skills/frontend-design/bklit-ui/SKILL.md .codex/skills/frontend-design/bklit-ui/rules/animation.md .codex/skills/frontend-design/bklit-ui/rules/composition.md .codex/skills/frontend-design/bklit-ui/rules/installation.md .codex/skills/frontend-design/bklit-ui/rules/theming.md .codex/skills/frontend-design/bklit-ui/rules/tooltips.md .codex/skills/frontend-design/frontend-qa/SKILL.md .codex/skills/frontend-design/moneygraph-frontend/SKILL.md .codex/skills/frontend-design/shadcn/SKILL.md .codex/skills/frontend-design/shadcn/agents/openai.yml .codex/skills/frontend-design/shadcn/assets/shadcn-small.png .codex/skills/frontend-design/shadcn/assets/shadcn.png .codex/skills/frontend-design/shadcn/cli.md .codex/skills/frontend-design/shadcn/customization.md .codex/skills/frontend-design/shadcn/evals/evals.json .codex/skills/frontend-design/shadcn/mcp.md .codex/skills/frontend-design/shadcn/registry.md .codex/skills/frontend-design/shadcn/rules/base-vs-radix.md .codex/skills/frontend-design/shadcn/rules/chat.md .codex/skills/frontend-design/shadcn/rules/composition.md .codex/skills/frontend-design/shadcn/rules/forms.md .codex/skills/frontend-design/shadcn/rules/icons.md .codex/skills/frontend-design/shadcn/rules/styling.md .codex/skills/moneygraph-ai-investigator/SKILL.md .codex/skills/moneygraph-api-contract/SKILL.md .codex/skills/moneygraph-data-validation/SKILL.md .codex/skills/moneygraph-graph-engine/SKILL.md .codex/skills/moneygraph-output-validation/SKILL.md .codex/skills/moneygraph-priority-engine/SKILL.md .codex/skills/moneygraph-role-engine/SKILL.md .codex/skills/moneygraph-seed-convergence/SKILL.md .dockerignore .env.example .gitignore .python-version AGENTS.md Dockerfile README.md apps/.gitkeep apps/backend/.gitkeep apps/backend/AGENTS.md apps/backend/explore.py apps/backend/investigate.py apps/backend/moneygraph/__init__.py apps/backend/moneygraph/api.py apps/backend/moneygraph/communities.py apps/backend/moneygraph/critic.py apps/backend/moneygraph/data_validation.py apps/backend/moneygraph/diagnostics.py apps/backend/moneygraph/evidence.py apps/backend/moneygraph/features.py apps/backend/moneygraph/graph_engine.py apps/backend/moneygraph/grounding.py apps/backend/moneygraph/investigation_tools.py apps/backend/moneygraph/investigator.py apps/backend/moneygraph/outputs.py apps/backend/moneygraph/pipeline.py apps/backend/moneygraph/priority.py apps/backend/moneygraph/product.py apps/backend/moneygraph/roles.py apps/backend/moneygraph/seed_convergence.py apps/backend/moneygraph/semantics.py apps/backend/moneygraph/store.py apps/backend/moneygraph/temporal.py apps/backend/requirements-ai.txt apps/backend/requirements-api.txt apps/backend/requirements-dev.txt apps/backend/requirements.txt apps/backend/run_phases_0_4.py apps/backend/tests/test_api.py apps/backend/tests/test_completion.py apps/backend/tests/test_evidence_validation.py apps/backend/tests/test_explorer.py apps/backend/tests/test_foundation.py apps/backend/tests/test_investigator.py apps/backend/tests/test_mandatory_pipeline.py apps/frontend/.gitignore apps/frontend/.gitkeep apps/frontend/.oxlintrc.json apps/frontend/README.md apps/frontend/components.json apps/frontend/index.html apps/frontend/package-lock.json apps/frontend/package.json apps/frontend/public/demo.json apps/frontend/public/favicon.svg apps/frontend/scripts/agent-browser-qa.mjs apps/frontend/scripts/agent-live-qa.mjs apps/frontend/scripts/analyst-browser-qa.mjs apps/frontend/scripts/api-browser-qa.mjs apps/frontend/scripts/browser-qa.mjs apps/frontend/scripts/csv-browser-qa.mjs apps/frontend/scripts/export-project-data.py apps/frontend/scripts/generate-demo.mjs apps/frontend/scripts/graph-browser-qa.mjs apps/frontend/scripts/graph-qa/encoding.mjs apps/frontend/scripts/graph-qa/interactions.mjs apps/frontend/scripts/graph-qa/settings.mjs apps/frontend/scripts/prepare-project-data.mjs apps/frontend/scripts/project-browser-qa.mjs apps/frontend/scripts/test_export_project_data.py apps/frontend/server/agent-http.mjs apps/frontend/server/agent-http.test.mjs apps/frontend/server/agent-security.test.mjs apps/frontend/server/agent.d.mts apps/frontend/server/agent.mjs apps/frontend/server/agent.test.mjs apps/frontend/server/investigation-tools.mjs apps/frontend/server/investigation-tools.test.mjs apps/frontend/server/production.mjs apps/frontend/server/production.node-test.mjs apps/frontend/server/standalone.mjs apps/frontend/src/App.tsx apps/frontend/src/components/AMLGraph.tsx apps/frontend/src/components/agent-chat.tsx apps/frontend/src/components/annotation-boundary.tsx apps/frontend/src/components/csv-dashboard.tsx apps/frontend/src/components/graph-panel.tsx apps/frontend/src/components/graph-settings.tsx apps/frontend/src/components/node-inspector.tsx apps/frontend/src/components/priority-panel.tsx apps/frontend/src/components/shared.tsx apps/frontend/src/components/ui/accordion.tsx apps/frontend/src/components/ui/alert.tsx apps/frontend/src/components/ui/badge.tsx apps/frontend/src/components/ui/bubble.tsx apps/frontend/src/components/ui/button.tsx apps/frontend/src/components/ui/card.tsx apps/frontend/src/components/ui/checkbox.tsx apps/frontend/src/components/ui/empty.tsx apps/frontend/src/components/ui/field.tsx apps/frontend/src/components/ui/input.tsx apps/frontend/src/components/ui/label.tsx apps/frontend/src/components/ui/message-scroller.tsx apps/frontend/src/components/ui/message.tsx apps/frontend/src/components/ui/progress.tsx apps/frontend/src/components/ui/scroll-area.tsx apps/frontend/src/components/ui/select.tsx apps/frontend/src/components/ui/separator.tsx apps/frontend/src/components/ui/sheet.tsx apps/frontend/src/components/ui/skeleton.tsx apps/frontend/src/components/ui/slider.tsx apps/frontend/src/components/ui/spinner.tsx apps/frontend/src/components/ui/switch.tsx apps/frontend/src/components/ui/table.tsx apps/frontend/src/components/ui/tabs.tsx apps/frontend/src/components/ui/textarea.tsx apps/frontend/src/components/ui/toggle-group.tsx apps/frontend/src/components/ui/toggle.tsx apps/frontend/src/components/ui/tooltip.tsx apps/frontend/src/index.css apps/frontend/src/lib/api.ts apps/frontend/src/lib/chat.test.ts apps/frontend/src/lib/chat.ts apps/frontend/src/lib/contracts.test.ts apps/frontend/src/lib/contracts.ts apps/frontend/src/lib/csv-analytics.test.ts apps/frontend/src/lib/csv-analytics.ts apps/frontend/src/lib/csv.worker.ts apps/frontend/src/lib/export.ts apps/frontend/src/lib/flow-layout.test.ts apps/frontend/src/lib/flow-layout.ts apps/frontend/src/lib/format.ts apps/frontend/src/lib/graph-adapter.test.ts apps/frontend/src/lib/graph-adapter.ts apps/frontend/src/lib/graph-api.test.ts apps/frontend/src/lib/graph-demo.ts apps/frontend/src/lib/graph-presentation.ts apps/frontend/src/lib/graph-settings.test.ts apps/frontend/src/lib/graph-settings.ts apps/frontend/src/lib/use-agent-chat.ts apps/frontend/src/lib/use-resource.ts apps/frontend/src/lib/utils.ts apps/frontend/src/main.tsx apps/frontend/tsconfig.app.json apps/frontend/tsconfig.json apps/frontend/tsconfig.node.json apps/frontend/vite.config.ts apps/frontend/vitest.agent.config.ts data/edges.parquet data/nodes.parquet data/transactions.parquet docker-compose.yml docs/aml-graph-qa.md docs/aml-graph.md docs/backend/agent-prompts.md docs/backend/ai-chat-handoff.md docs/backend/ai-investigator.md docs/backend/analytics-contract.md docs/backend/api-contract.md docs/backend/checklist.md docs/backend/completion-report.md docs/backend/data-contract.md docs/backend/decisions.md docs/backend/examples/cluster.mock.json docs/backend/examples/graph.mock.json docs/backend/examples/node-card.mock.json docs/backend/examples/top-nodes.mock.json docs/backend/final-independent-review.md docs/backend/frontend-handoff.md docs/backend/full-review.md docs/backend/implementation-plan.md docs/backend/output-contract.md docs/backend/scaling.md docs/backend/testing-strategy.md docs/canvas-workspace-qa.md docs/case-requirements-audit.md docs/deployment.md docs/features.md docs/frontend-qa-report.md docs/frontend-requirements-and-pipeline.md docs/moneygraph-investigator-design.md docs/moneygraph-ui-design-contract.md docs/organizer-reproducibility.md docs/project-data-qa.md docs/project-review-2026-09-23.md docs/project_description.md main.py package-lock.json package.json render.yaml requirements.txt results/analytics_diagnostics.json results/clusters.csv results/diagnostics_phase_0_4.json results/graph.json results/node_cards.json results/nodes_roles.csv results/top_nodes.csv scripts/run-local.py starter/README.md starter/READ_2.md starter/out/clusters.csv starter/out/nodes_roles.csv starter/out/top_nodes.csv starter/requirements.txt starter/starter.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.