AAYMA
RU
Войти

HackAlem — объяснимая очередь проверки финансовой сети

AML-инструмент: из трёх Parquet строит направленный граф, присваивает роли (consolidator, distributor, transit, terminal, coordinator, peripheral) и…

Доведённый продукт
Команда «Vector field» 28💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Vector field
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт

Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)

Суть

AML-инструмент: из трёх Parquet строит направленный граф, присваивает роли (consolidator, distributor, transit, terminal, coordinator, peripheral) и приоритет проверки всем 2248 узлам, выделяет 105 сообществ и показывает очередь, карточку «почему» и граф; опционально работает OpenAI-Investigator.

Как устроено

Детерминированный Python-pipeline (pandas, NetworkX) проверяет схемы, считает признаки, роли по пороговым правилам, Louvain-кластеры (seed=42) и направленную betweenness; приоритет задаётся взвешенной суммой шести positive-midrank перцентилей (seed-связи, достижимость ≤4 шага, число отправителей/получателей, объём, betweenness). Результаты сохраняются в 3 CSV и JSON snapshot, который отдаёт FastAPI; React + Cytoscape.js показывает очередь и подграф. Investigator на OpenAI Responses API использует 4 read-only инструмента (get_entity_profile, get_subgraph, rank_entities, find_common_recipients), ответы проверяются на ссылки GID.

Ключевые решения

  • NetworkX
  • Louvain
  • betweenness centrality
  • positive midrank
  • rule-based роли
  • function calling
  • grounding-проверка фактов

Метрики

2248 узлов, 105 кластеров; полный pipeline 3,339 с, повтор 3,073 с, выходы совпали побайтово

Особенности

Прозрачная формула приоритета с шестью сохраняемыми вкладами как evidence; роли подаются как гипотезы, а не вероятность преступления; побайтовая воспроизводимость CSV и SHA-256 manifest в submission/.

Стек

Python · pandas · NumPy · PyArrow · NetworkX · FastAPI · Pydantic · React · TypeScript · Vite · Cytoscape.js

Модели

gpt-5.6-luna


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-836cc3bf-vector-field.

README

README.md

HackAlem — объяснимая очередь проверки финансовой сети

Кого проверить первым, почему и какие связи это подтверждают? HackAlem помогает AML-аналитику ответить на эти вопросы по предоставленной транзакционной сети: от исходных Parquet до ранжированного списка, карточки с числовыми основаниями и направленного графа.

Приоритет означает порядок дальнейшей проверки. Роли — гипотезы о функции узла в наблюдаемой сети. Ни один из этих показателей не является вероятностью преступления.

Быстрый запуск · Сценарий для жюри · Готовые CSV · Проверки ядра · Проверки нового UI

1. Название проекта

HackAlem — объяснимая очередь проверки финансовой сети. Решение кейса «Граф денег: восстановление финансовой структуры организованной группы по транзакционной сети».

2. Проблема и пользователи

Большой список переводов сам по себе не объясняет, с какого участника начинать исследование. Аналитику нужно сопоставить входящие и исходящие связи, связи с исходными участниками, положение в сети и ограничения выборки.

HackAlem собирает эти признаки в проверяемую очередь. Для каждого узла доступны основания роли и приоритета, наблюдаемые переводы, связи и следующий запрос недостающих данных. Это прототип поддержки аналитического исследования; решения о клиентах он не принимает.

3. Что реализовано

ВозможностьЧто получает пользователь
Полный расчёт исходного кейсаТри Parquet → три CSV и единый JSON snapshot без API key
Роли и приоритетыВсе 2248 узлов, включая 19 изолированных seed; основная роль, вторичные признаки, раздельные оценки роли и приоритета
ОбъясненияШесть числовых вкладов в приоритет, исходные метрики, ссылки на evidence и ограничения каждого профиля
Кластеры105 рассчитанных сообществ, их состав в результатах, агрегаты и шаблонные гипотезы
Рабочий экранОчередь, фильтры, поиск полного GID по всей выборке, карточка «Почему этот узел», направленный граф
Исследование окруженияВыбор узла, стрелки, легенда, граница depth=4, счётчики скрытых соседей и расширение подграфа
ЭкспортСкачивание nodes_roles.csv, clusters.csv, top_nodes.csv из интерфейса
Опциональный InvestigatorВопрос по всей сети или выбранному узлу; факты, ссылки на GID, переход из ответа в граф и реальные вызовы инструментов
Работа без AIПри отсутствии ключа, ошибке или таймауте модели аналитика, поиск, карточки, граф и CSV продолжают работать

На проверенном Windows-окружении полный pipeline занял 3,339 с, повтор — 3,073 с; все четыре выходных файла совпали побайтово. Проверка чистого Git checkout заняла 3,250 с и воспроизвела те же результаты. Это измерения на текущем наборе, не обещание производительности для произвольной сети.

4. Как работает решение

  1. Пользователь передаёт папку с nodes.parquet, edges.parquet, transactions.parquet.
  2. Pipeline проверяет схемы, идентификаторы, суммы переводов и количества операций. Повторяющиеся строки transactions без transaction_id сохраняются.
  3. Python строит граф всех узлов, рассчитывает признаки, роли, сообщества и приоритеты по общим правилам.
  4. Результаты сохраняются в CSV и snapshot. API и интерфейс используют этот же расчёт; клики не запускают аналитику заново.
  5. Аналитик выбирает узел из очереди или находит произвольный GID, изучает основания и направленные связи. Ограниченный подграф не меняет метрики карточки.
  6. При наличии ключа Investigator уточняет исследование через ограниченные read-only инструменты. Из его вывода можно перейти к соответствующему узлу и проверить факты.

Откуда берутся роли и баллы

Правила версии v0 реализованы в pipeline/config.py и pipeline/run.py. Нет отдельных правил для демонстрационных GID.

РольОсновные условия допуска
consolidator — консолидацияНе менее 3 разных отправителей
distributor — распределениеНе менее 10 разных получателей
transit — гипотеза транзитаВход и выход >0; ≥2 операций с каждой стороны; наблюдаемый out/in от 0,8 до 1,2; не seed, depth<4
terminal — гипотеза конечного получателяНе seed, depth<4; вход >0; out/in≤0,1; входящие на ≥2 датах; последний вход не позднее 29 июля
coordinator — структурный посредник, кандидатВходящие и исходящие связи; достижимость от ≥2 seed; betweenness≥90-го квантиля положительных значений; межкластерный объём≥20%
peripheral — недостаточно признаков ролиНи одна из ролей не прошла условия допуска

Для допустимых ролей сила сигнала умножается на эвристический коэффициент: 0,85 для consolidator/distributor, 0,60 для transit, 0,50 для terminal, 0,55 для coordinator. Основная роль выбирается по максимальному score; равенства разрешаются фиксированным порядком из конфигурации. При одной операции score ограничен 0,40; fallback — 0,15, для изолята — 0,05. Другие допустимые роли сохраняются как вторичные.

Приоритет считается отдельно:

priority = 0.175 × p(прямые seed-отправители)
         + 0.175 × p(достижимость от seed за ≤4 шага)
         + 0.250 × p(число отправителей)
         + 0.200 × p(max(наблюдаемый вход, наблюдаемый выход))
         + 0.100 × p(betweenness)
         + 0.100 × p(число получателей)

p(x) — positive midrank по положительным значениям признака во всей сети: (число меньших + 0.5 × число равных) / N; нули получают 0. Шесть вкладов сохраняются как evidence и доступны для сверки в карточке. Веса — прозрачная политика MVP; их оптимальность на размеченных данных не установлена. Подробности: решения о методике, BUILD_BRIEF.

5. Технологии

СлойИспользуется в репозитории
АналитикаPython, pandas, NumPy, PyArrow, NetworkX; направленная невзвешенная betweenness, Louvain с seed=42
BackendFastAPI, Pydantic, Uvicorn; HTTP JSON API над snapshot
ИнтерфейсTypeScript, React, Vite, Cytoscape.js
AIOpenAI Python SDK, Responses API; модель по умолчанию gpt-5.6-luna, настройка через OPENAI_MODEL
ПроверкиPython unittest, проверки реальных Parquet и контрактов, TypeScript/Vite build, браузерные сценарии
ХранениеИсходные Parquet, CSV и JSON snapshot; данные API в памяти процесса

Зафиксированные Python-зависимости: requirements-lock.txt. Frontend-зависимости: package.json и package-lock.json. Реальные AI-сценарии проверены с gpt-5.6-luna; доступ к модели зависит от настроек аккаунта OpenAI.

6. Архитектура проекта

flowchart LR
  P[3 исходных Parquet] --> V[Проверка схем и агрегатов]
  V --> A[Детерминированная аналитика Python]
  A --> C[3 CSV]
  A --> S[JSON snapshot]
  S --> API[FastAPI]
  API --> UI[React: очередь, карточка, граф]
  S --> T[4 read-only инструмента]
  T <--> I[Один Investigator / OpenAI]
  I --> G[Проверка ссылок и фактов]
  G --> UI
КаталогНазначение
case/Официальное задание и исходные данные
pipeline/Проверка входов, признаки, роли, кластеры, CSV и snapshot
backend/API, экспорт, загрузка snapshot, вызов Investigator
frontend/Единый аналитический экран
agent/Один bounded Investigator, адаптер OpenAI и проверка ответов
shared/TypeScript-контракт v1 и синтетические fixtures
integration/Интеграционные тесты и отчёты проверок
submission/Готовые CSV, manifest с SHA-256 и резервный пакет
scripts/demo.pyЛокальный запуск pipeline → API → собранный UI
docs/Методика, контракт, ограничения и сценарий демо

API: GET /api/summary, /api/entities, /api/entities/{gid}, /api/subgraph, /api/clusters, /api/export/{filename}; POST /api/investigate. Формы ответов и ошибки описаны в API_CONTRACT.md.

GID хранится как int64 в аналитике и как точная десятичная строка в HTTP, React и инструментах. UI не вычисляет роли или баллы по показанной части графа. Investigator использует get_entity_profile, get_subgraph, rank_entities, find_common_recipients; изменять данные и выполнять банковские действия он не может.

7. Установка и запуск

Проверенная конфигурация: Windows, Python 3.14.7, Node.js 24.21.0. Нужны Git, Python, Node.js/npm и место для зависимостей. Команды ниже выполняются из корня репозитория. Ключ OpenAI для основного решения не требуется.

Получить проект

git clone https://github.com/BAITC-Hacks/hack-836cc3bf-vector-field.git
cd hack-836cc3bf-vector-field

Доступ к клонированию определяется правами репозитория.

Windows PowerShell

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-lock.txt
npm.cmd ci --prefix frontend
npm.cmd run build --prefix frontend
.\.venv\Scripts\python.exe scripts/demo.py --no-ai

macOS / Linux

Эквивалентные команды приведены для воспроизведения; запуск на этих ОС в финальной проверке не выполнялся.

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements-lock.txt
npm ci --prefix frontend
npm run build --prefix frontend
.venv/bin/python scripts/demo.py --no-ai

Открыть http://127.0.0.1:8000/. Launcher сначала рассчитывает данные, затем запускает FastAPI и production UI. Остановка — Ctrl+C. При занятом порте добавить --port 8014 и открыть соответствующий адрес.

Исходная папка по умолчанию: case/data (1)/data. Для отдельного расчёта другой папки:

.\.venv\Scripts\python.exe -m pipeline --data 'case/data (1)/data' --out pipeline/out

Выходы: pipeline/out/nodes_roles.csv, clusters.csv, top_nodes.csv, snapshot.json. После успешного расчёта scripts/demo.py --skip-pipeline --no-ai использует существующие результаты.

Подключить Investigator — необязательно

Остановить сервер и установить переменные окружения перед повторным запуском:

$env:OPENAI_API_KEY='<ваш API key>'
$env:OPENAI_MODEL='gpt-5.6-luna'
.\.venv\Scripts\python.exe scripts/demo.py --skip-pipeline

Для macOS/Linux используются export OPENAI_API_KEY='…', export OPENAI_MODEL='gpt-5.6-luna' и .venv/bin/python scripts/demo.py --skip-pipeline.

Ключ хранить локально и не коммитить. Пример настроек — .env.example. Файл .env читается launcher только при явном --env-file .env; обычный Uvicorn автоматически его не загружает. --no-ai отключает AI даже при наличии ключа. Запрос AI отправляет ограниченные результаты инструментов внешнему OpenAI API; вызовы могут тарифицироваться провайдером.

Резервное демо без Node и повторного расчёта

После установки Python-зависимостей можно восстановить проверенные выходы и собранный интерфейс:

.\.venv\Scripts\python.exe -m zipfile -e submission/backup.zip .
.\.venv\Scripts\python.exe scripts/demo.py --skip-pipeline --no-ai

Распаковка заменяет одноимённые локальные файлы в pipeline/out/ и frontend/dist/. Это сохранённый проверенный результат, не новый расчёт. Резерв не содержит ключей, зависимостей или сгенерированных AI-ответов. Контрольные суммы — в manifest.json.

8. Как проверить решение

Пятиминутный сценарий для жюри

  1. Запустить приложение. Сводка должна показать 2248 узлов, 3119 направленных связей, 4840 переводов и 105 кластеров. Первый узел очереди выбирается автоматически.
  2. Найти 100000003115284100. В карточке: 8 отправителей, 15 входящих операций, 2 160 500 KZT; priority 0.922834. Раскрыть шесть вкладов приоритета и основания роли. Граф содержит 10 узлов и 11 направленных связей.
  3. Нажать «2 узла»: интерфейс покажет 8 скрытых соседей и 10 скрытых рёбер. Расширить окружение; метрики карточки останутся прежними.
  4. Проверить 100000000018102100: depth=4, недостаточно признаков роли; нулевой выход не выдается за доказательство terminal. Проверить изолят 100000000456947100: полная карточка и отсутствие наблюдаемых связей.
  5. Ввести 999999999999999999: получить «Узел не найден». Скачать три CSV через «Экспорт CSV».
  6. Если настроен AI, выбрать «Вся сеть» и спросить: «Какие узлы проверить первыми и почему?». Открыть GID из ответа на графе. Для узлового вопроса выбрать «Выбранный узел»: «Что известно об узле 100000003115284100 и какие признаки поддерживают его приоритет?».

Дополнительный пример: 100000002578405100 — 116 получателей; после расширения окружения 117 узлов / 118 рёбер. Кнопка «Всё окружение» возвращает общий обзор. Подробный сценарий: docs/DEMO.md.

Автоматические и интеграционные проверки

.\.venv\Scripts\python.exe -m unittest pipeline.test_pipeline -v
.\.venv\Scripts\python.exe -m unittest discover -s agent -p 'test_*.py' -v
.\.venv\Scripts\python.exe -m unittest backend.test_openai_model -v
.\.venv\Scripts\python.exe -m unittest discover -s integration -p 'test_*.py' -v
npm.cmd run build --prefix frontend

Зафиксированный итог ядра — 52 Python-теста PASS: pipeline 4, agent 32, backend 2, integration 14. Тесты проверяют реальные входные данные и инварианты; сетевые вызовы модели в автоматических тестах подменены. Отдельно в production UI прошли два реальных AI-вопроса, переход finding → graph, поиск, изолят, boundary, неизвестный GID, усечение графа и три скачивания CSV.

Доказательства и точные условия: FINAL_GATE.md, FINAL_UX_INTEGRATION.md. Последний UI изменяет только представление и взаимодействие; core, scoring и контракт сохранены. Локальная повторная установка frontend остановилась из-за заполнения диска; сборка выполнена на ранее установленных зависимостях того же lockfile. Первая чистая установка зафиксирована в core gate.

9. Данные и интеграции

Источник — три предоставленных кейсом файла в case/data (1)/data:

ФайлСодержимое текущей выборки
nodes.parquet2248 узлов, признаки seed и глубины обхода
edges.parquet3119 направленных агрегированных связей
transactions.parquet4840 наблюдаемых переводов

Период — июль 2026, внутрибанковские переводы от 5000 KZT, исходящий обход до 4 колен от 81 seed. Граф содержит 35 слабосвязных компонент, включая 19 изолятов. 97 повторяющихся строк transactions сохранены: отсутствие transaction_id не позволяет считать их ошибочными дублями. Суммы и количества сверяются с edges.

В официальном кейсе данные обозначены как обезличенные, GID — синтетический идентификатор без привязки к личности; данные предоставлены для использования в рамках хакатона. shared/fixtures.json содержит отдельные синтетические примеры контракта и не служит источником финальных scores.

Результаты в submission/:

  • nodes_roles.csv — 2248 строк; gid,role,role_score,cluster_id,priority_score,evidence.
  • clusters.csv — 105 строк; cluster_id,n_nodes,n_seed,sum_kzt_internal,top_gids,hypothesis.
  • top_nodes.csv — 100 уникальных узлов; rank,gid,role,priority_score,why, сортировка priority DESC / gid ASC.

Баллы конечны и находятся в [0,1]; краткое evidence непустое, числовое и не длиннее 200 символов. Полные факты хранятся в snapshot. Единственная опциональная внешняя интеграция во время работы — OpenAI API. Подключения к банковским системам и внешнего обогащения данных нет.

10. Ограничения текущей версии

  • Неполная наблюдаемость. Другие банки, переводы ниже порога, остатки и другие периоды неизвестны. Входящие переводы неполны для всех узлов; исходящие depth=4 обрезаны.
  • Гипотезы вместо установленных фактов о клиентах. Нет размеченных истинных ролей; accuracy/F1 и экономия времени аналитика не измерялись. peripheral не означает безопасность клиента; coordinator не доказывает управление сетью.
  • Нет доказательства движения тех же средств. Даты имеют точность до дня; путь в агрегированном графе не устанавливает хронологию и происхождение денег. out/in не является балансом.
  • AI ограничен. Backend проверяет GID, evidence и соответствие фактов snapshot, но не доказывает каждое утверждение свободного текста. Есть лимиты tools и времени; при сбое доступна основная аналитика.
  • Кластеры в UI представлены базово. Есть рассчитанные результаты, фильтрация/идентификаторы и CSV; отдельного развитого рабочего места исследования кластеров нет.
  • Прототип локального исследования. Нет production-развёртывания, аутентификации, workflow, банковских действий или собственного обученного ML. Запуск на втором ноутбуке и macOS/Linux не подтверждён финальным gate.
  • Масштабирование до ~1 млн узлов — план. Точная betweenness и NetworkX в памяти потребуют пакетной обработки, компактного графового движка, приближённой центральности и серверных подграфов. Это описано в BUILD_BRIEF, но не реализовано и не измерено на таком масштабе.

11. Демо и deployed-версия

Публичная deployed-версия в репозитории не подтверждена. Проверенный способ демонстрации — локальный запуск на http://127.0.0.1:8000/ по инструкции выше.

Для показа без пересчёта используется submission/backup.zip. Для независимой проверки — исходные данные, исходный код, три CSV, SHA-256 manifest и отчёты в integration/.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
43
Авторы
4
Файлы
109
Ветки
9

Авторы коммитов

femaledelta 17nnurkass 16Dau27 9Dau27 1

История коммитов

  • 2026-09-23 17:38fix: polish final investigation demo uxDau27
  • 2026-09-23 17:53Merge final UI and jury README (#3)femaledelta
  • 2026-09-23 17:52docs: rewrite Russian README for hackathon juryfemaledelta
  • 2026-09-23 17:50docs: update case alignment assessmentnnurkass
  • 2026-09-23 17:48docs: prove integrated final UI and refresh demo backupfemaledelta
  • 2026-09-23 17:47Merge remote-tracking branch 'origin/codex/frontend' into codex/frontendnnurkass
  • 2026-09-23 17:46docs: assess alignment with official casennurkass
  • 2026-09-23 17:44fix: polish final investigation demo uxDau27
Все коммиты (43)
  • 2026-09-23 17:38Merge verified HackAlem submission closure (#2)femaledelta
  • 2026-09-23 17:37docs: prove final live Investigator and demo gatefemaledelta
  • 2026-09-23 17:27docs: record verified submission branch publicationfemaledelta
  • 2026-09-23 17:24fix: close submission evidence and reproducibility gapsfemaledelta
  • 2026-09-23 16:16feat: integrate live investigator with bounded backend runtimeDau27
  • 2026-09-23 16:51docs: record final main live integration gatefemaledelta
  • 2026-09-23 16:48fix(agent): align finding instructions with grounding guardfemaledelta
  • 2026-09-23 16:41merge: reconcile stage two runtime and verified live Investigator flowfemaledelta
  • 2026-09-23 16:29merge: integrate grounded real Investigator adapterfemaledelta
  • 2026-09-23 16:28merge: integrate completed frontend Investigator UXfemaledelta
  • 2026-09-23 16:19fix: complete Luna live provider gate with grounded evidencefemaledelta
  • 2026-09-23 15:17Merge live HackAlem integrationDau27
  • 2026-09-23 15:14chore: omit frontend push-flow placeholder from integrationDau27
  • 2026-09-23 15:13merge: incorporate latest backend and agent checkpointDau27
  • 2026-09-23 15:11feat: serve live snapshot to API agent and frontendDau27
  • 2026-09-23 16:03feat(frontend): render grounded Investigator results in live workspacennurkass
  • 2026-09-23 16:01feat: wire optional OpenAI investigator through snapshot toolsfemaledelta
  • 2026-09-23 14:50merge: integrate published frontend branchDau27
  • 2026-09-23 14:33test(pipeline): verify live CSV invariants and document runDau27
  • 2026-09-23 14:29feat(pipeline): add deterministic parquet analytics and CSV exportsDau27
  • 2026-09-23 15:01docs: make root README reflect verified CSV pipelinennurkass
  • 2026-09-23 14:48feat: add fixture-backed frontend investigation screenfemaledelta
  • 2026-09-23 14:41test: verify pipeline profiles through agent boundarynnurkass
  • 2026-09-23 14:39Merge remote-tracking branch 'origin/codex/agent' into codex/integration-backend-agentnnurkass
  • 2026-09-23 14:39docs: require verified commit and push after each stagennurkass
  • 2026-09-23 14:37merge: bring shared contract v1 and decisions into codex/frontendfemaledelta
  • 2026-09-23 14:36agent: expose trusted facts with tool observationsnnurkass
  • 2026-09-23 14:35agent: add bounded investigator loop and trusted tool sessionnnurkass
  • 2026-09-23 14:30agent: derive citable evidence from common recipient pathsnnurkass
  • 2026-09-23 14:27chore: add unnamed placeholder filefemaledelta
  • 2026-09-23 14:15agent: add fixture-backed investigator boundary and fact validationnnurkass
  • 2026-09-23 14:07docs: add stage one prompts for backend frontend and agent ownersnnurkass
  • 2026-09-23 14:04docs: clarify score evidence and freeze review decisionsnnurkass
  • 2026-09-23 14:01docs: lock shared API contract v1 and 270 minute execution plannnurkass
  • 2026-09-23 13:49docs: establish shared HackAlem context and implementation guidancennurkass
Структура репозитория (109 файлов)
.env.example
.gitattributes
.gitignore
AGENTS.md
README.md
agent/INVESTIGATOR_INSTRUCTIONS.md
agent/README.md
agent/STAGE_01_NOTES.md
agent/__init__.py
agent/boundary.py
agent/evidence.py
agent/fixture_provider.py
agent/harness.py
agent/live_smoke.py
agent/openai_model.py
agent/requirements.txt
agent/session.py
agent/test_harness.py
agent/test_openai_model.py
agent/test_session.py
agent/test_stage01.py
agent/validation.py
analysis/README.md
analysis/audit_dataset.py
analysis/dataset_audit.json
analysis/node_metrics.csv
analysis/requirements.txt
backend/README.md
backend/__init__.py
backend/app.py
backend/requirements.txt
backend/service.py
backend/test_openai_model.py
case/HackAlem AI_ Граф денег_ восстановление финансовой структуры организованной группы по транзакционной сети.md
case/README.md
case/data (1)/data/edges.parquet
case/data (1)/data/nodes.parquet
case/data (1)/data/transactions.parquet
case/starter (1)/starter/README.md
case/starter (1)/starter/requirements.txt
case/starter (1)/starter/starter.py
context/HACKALEM_CONTEXT_FOR_CODEX.md
context/HACKALEM_TEAM_CONTEXT_FOR_CODEX.md
context/HackAlem 2026 — Full Team Execution Plan.md
docs/API_CONTRACT.md
docs/BUILD_BRIEF.md
docs/DECISIONS.md
docs/DEMO.md
docs/EXECUTION_PLAN_270_MIN.md
docs/RED_TEAM_REVIEW.md
docs/STAGE_01_PROMPTS.md
frontend/FINAL_UX_GATE.md
frontend/README.md
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/src/App.tsx
frontend/src/components/BriefHeader.tsx
frontend/src/components/Dossier.css
frontend/src/components/Dossier.tsx
frontend/src/components/FixtureScenarios.tsx
frontend/src/components/GraphPanel.css
frontend/src/components/GraphPanel.tsx
frontend/src/components/InvestigationResult.tsx
frontend/src/components/Investigator.css
frontend/src/components/InvestigatorPanel.tsx
frontend/src/components/PriorityQueue.tsx
frontend/src/components/SearchBox.tsx
frontend/src/components/States.tsx
frontend/src/data/fixtureProvider.ts
frontend/src/data/format.ts
frontend/src/data/httpProvider.ts
frontend/src/data/index.ts
frontend/src/data/labels.ts
frontend/src/data/limitations.ts
frontend/src/data/provider.ts
frontend/src/data/useAsyncData.ts
frontend/src/main.tsx
frontend/src/styles.css
frontend/src/vite-env.d.ts
frontend/tsconfig.json
frontend/vite.config.ts
integration/FINAL_GATE.md
integration/FINAL_UX_INTEGRATION.md
integration/README.md
integration/STAGE2_CLOSURE.md
integration/test_ai_model_path.py
integration/test_live_service.py
integration/test_pipeline_agent.py
pipeline/.gitignore
pipeline/README.md
pipeline/__init__.py
pipeline/__main__.py
pipeline/config.py
pipeline/requirements.txt
pipeline/run.py
pipeline/snapshot.py
pipeline/test_pipeline.py
requirements-lock.txt
scripts/demo.py
shared/README.md
shared/contracts.ts
shared/fixtures.json
submission/README.md
submission/backup.zip
submission/clusters.csv
submission/manifest.json
submission/nodes_roles.csv
submission/top_nodes.csv
Ветки (9)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.