# Полный отчёт по программе PAPA YU (Tauri + React)

**Дата:** 23 января 2026  
**Объект анализа:** приложение papa-yu (десктоп на Tauri 2 + React 19).  
**Задача:** анализ архитектуры, связей, промптов и состояния программы в целом **без внесения исправлений**.

---

## 1. Архитектура программы

### 1.1. Общая схема

Приложение построено по схеме **двух слоёв**:

| Слой | Технологии | Расположение |
|------|------------|--------------|
| **Backend (оболочка)** | Tauri 2, Rust | `desktop/src-tauri/` |
| **Frontend (UI)** | React 19, Vite 7, TypeScript | `desktop/ui/` |

- **Tauri** обеспечивает нативное окно, загрузку веб-интерфейса (из `../ui/dist` в production или с `http://localhost:5173` в dev) и минимальную инициализацию (плагин логов в debug).
- **React-приложение** — SPA с HashRouter: все экраны рендерятся на клиенте, отдельного сервера рендеринга нет.

### 1.2. Структура каталогов

```
papa-yu/
├── desktop/
│   ├── src-tauri/          # Tauri (Rust)
│   │   ├── src/
│   │   │   ├── main.rs     # точка входа, вызов app_lib::run()
│   │   │   └── lib.rs      # tauri::Builder, setup (log), run
│   │   ├── capabilities/
│   │   │   └── default.json # окно "main", core:default
│   │   ├── build.rs
│   │   ├── Cargo.toml
│   │   └── tauri.conf.json
│   └── ui/                 # Frontend (React)
│       ├── src/
│       │   ├── App.tsx
│       │   ├── main.tsx
│       │   ├── index.css
│       │   ├── config/routes.ts
│       │   ├── store/app-store.ts
│       │   ├── lib/event-bus.ts
│       │   ├── components/
│       │   │   ├── layout/Layout.tsx
│       │   │   ├── ErrorBoundary.tsx
│       │   │   └── ErrorDisplay.tsx
│       │   └── pages/
│       │       ├── Dashboard.tsx
│       │       ├── Tasks.tsx
│       │       ├── ChatAgent.tsx
│       │       ├── PolicyEngine.tsx
│       │       ├── AuditLogger.tsx
│       │       ├── SecretsGuard.tsx
│       │       ├── Reglamenty.tsx
│       │       ├── TMCZakupki.tsx
│       │       ├── Finances.tsx
│       │       ├── Personnel.tsx
│       │       ├── Documents.tsx
│       │       └── NotFound.tsx
│       ├── package.json
│       ├── vite.config.ts
│       └── tailwind.config.ts
├── desktop-core/
│   └── tools/project-auditor/
│       └── index.ts        # пустой файл
├── index/
│   └── manifest.json       # version, sources
├── СИНХРОНИЗАЦИЯ_ПАПОК.md
└── PAPA YU.command
```

### 1.3. Сборка и запуск

- **Конфиг Tauri** (`tauri.conf.json`): productName «PAPA YU», identifier `com.papa-yu`, одно окно 800×600, resizable. `beforeDevCommand` и `beforeBuildCommand` обращаются к `$HOME/papa-yu/desktop/ui` (npm run dev / npm run build), frontend в dev — `http://localhost:5173`, в production — `../ui/dist`.
- **UI:** сборка — `tsc -b && vite build`, dev — `vite` (порт по умолчанию Vite, в конфиге Tauri указан 5173).
- **Единый запуск для пользователя:** скрипт `PAPA YU.command` в корне; для разработки — `cargo tauri dev` из `desktop/src-tauri`.

---

## 2. Выстроенные связи

### 2.1. Роутинг

- **React Router:** `HashRouter`, маршруты заданы в `App.tsx` и в `config/routes.ts`.
- **Маршруты:** `/` (Dashboard), `/tasks`, `/reglamenty`, `/tmc-zakupki`, `/finances`, `/personnel`, `/documents`, `/chat`, `/policies`, `/audit`, `/secrets`, `*` (NotFound).
- **RouteTracker:** при смене `location.pathname` вызывает `useAppStore.getState().setCurrentRoute(location.pathname)` — актуализация текущего маршрута в store.

### 2.2. Глобальное состояние (Zustand)

**Store** (`store/app-store.ts`):

- `currentRoute` — текущий путь (обновляется RouteTracker).
- `systemStatus` — три флага: `policyEngine`, `auditLogger`, `secretsGuard` (все по умолчанию `'active'`); используются на Dashboard для отображения статусов карточек.
- `recentAuditEvents` — массив событий аудита; пополняется при переходе с Dashboard по карточкам (addAuditEvent).
- `error` / `setError` — глобальное сообщение об ошибке (показ через ErrorDisplay).

Никаких вызовов Tauri (invoke) или бэкенд-API из store нет — только клиентское состояние.

### 2.3. Event Bus

**Файл:** `lib/event-bus.ts`.

- Синглтон с методами `on(event, callback)` и `emit(event, data)`.
- События: `NAVIGATE`, `ROUTE_CHANGED`.
- **Использование:** в `Layout.tsx` при клике по пункту навбара вызываются `eventBus.emit(Events.NAVIGATE, { path })` и `eventBus.emit(Events.ROUTE_CHANGED, { path })`. Подписчиков на эти события в коде нет — механизм заложен под будущее использование.

### 2.4. Layout и навигация

- **Layout** оборачивает все страницы внутри `HashRouter` и рендерит навбар с 8 пунктами: Панель, Задачи, Регламенты, ТМЦ и закупки, Финансы, Персонал, Документы, Чат с агентом. Страницы Policy Engine, Audit, Secrets в навбар не выведены — доступ только через Dashboard.
- Навбар строится по `ROUTES` из `config/routes.ts`; активный пункт — по `location.pathname`. Переход — через `Link` и дополнительный `onClick` с вызовом eventBus.

### 2.5. Dashboard → Policy / Audit / Secrets

- На **Dashboard** три карточки: Движок политик, Журнал аудита, Защита секретов.
- По клику: `eventBus.emit(NAVIGATE)`, `addAuditEvent(...)` с типом `navigation`, затем `navigate(path)` на `/policies`, `/audit` или `/secrets`.
- Текст и статус карточек берутся из `useAppStore` → `systemStatus` (всегда «Активен» в текущей реализации).

### 2.6. Обработка ошибок

- **ErrorBoundary** (классовый компонент) оборачивает всё приложение в `App.tsx`. При ошибке в дереве React показывает экран «Произошла ошибка» с кнопками «Вернуться» (сброс состояния ошибки) и «Перезагрузить».
- **ErrorDisplay** — глобальный тост: показывает `error` из store, автоскрытие через 10 с и кнопку закрытия. Чтобы сообщение появилось, кто-то должен вызвать `setError(...)`; в текущем коде вызовов нет (задел под будущее).

### 2.7. Связь Frontend ↔ Backend (Tauri)

- **Нет кастомных Tauri-команд** (в `lib.rs` только `tauri::Builder::default()`, setup с плагином log и `run()`).
- **Нет вызовов `invoke`** из UI — фронт не обращается к Rust-логике.
- **Capabilities:** в `default.json` разрешено только окно `main` и `core:default`. Специальных разрешений (файловая система, shell и т.д.) не настроено.

Итог: связь между фронтом и бэкендом ограничена тем, что Tauri загружает и отображает веб-интерфейс; обмена данными или командами между React и Rust нет.

---

## 3. Разделы и страницы

| Маршрут | Страница | Назначение по коду |
|--------|----------|--------------------|
| `/` | Dashboard | Панель с тремя карточками (Policy Engine, Audit Logger, Secrets Guard) и переходом на соответствующие страницы; блок «Система безопасности». |
| `/tasks` | Tasks | Задачи: пример списка задач, теги, категория (Аудит/Рефакторинг/Анализ/Другое), «пути к папкам» (folder links). Всё в локальном state, без сохранения и без отправки на backend. |
| `/reglamenty` | Reglamenty | Раздел «Регламенты» (АРМАК, ФАА, ЕАСА, Mura Menasa) — заглушка/контент по ТЗ. |
| `/tmc-zakupki` | TMCZakupki | ТМЦ и закупки — заглушка. |
| `/finances` | Finances | Финансы — заглушка. |
| `/personnel` | Personnel | Персонал — заглушка. |
| `/documents` | Documents | Документы — заглушка. |
| `/chat` | ChatAgent | Чат с агентом: ввод сообщений, кнопки «Очистка чата» и «Откат» (откат последнего сообщения). Ответ — захардкоженная строка (имитация через setTimeout). |
| `/policies` | PolicyEngine | Движок политик — страница по маршруту, доступ с Dashboard. |
| `/audit` | AuditLogger | Журнал аудита — страница по маршруту, доступ с Dashboard. |
| `/secrets` | SecretsGuard | Защита секретов — страница по маршруту, доступ с Dashboard. |
| `*` | NotFound | Страница «не найдено». |

Страницы PolicyEngine, AuditLogger, SecretsGuard, Reglamenty, TMCZakupki, Finances, Personnel, Documents в отчёте не разбирались построчно — констатируются как реализованные экраны с навигацией; бизнес-логика (правила, логи, секреты, регламенты и т.д.) может быть минимальной или заглушками.

---

## 4. Backend (Rust / Tauri) и desktop-core

### 4.1. Что есть

- **main.rs:** точка входа, `windows_subsystem = "windows"` в release, вызов `app_lib::run()`.
- **lib.rs:** сборка приложения Tauri, в `setup` при `cfg!(debug_assertions)` подключается `tauri_plugin_log` (LevelFilter::Info), затем `run(tauri::generate_context!())`.
- **tauri.conf.json:** конфигурация окна, сборки, путей к UI (см. выше).
- **capabilities/default.json:** одно окно `main`, права `core:default`.
- **Cargo.toml:** зависимости — tauri 2.9.5, tauri-plugin-log 2, serde, serde_json, log; сборка — tauri-build 2.5.3.

Кастомных команд, обработчиков событий Tauri, доступа к файлам/сети из Rust — нет.

### 4.2. desktop-core

- В репозитории есть каталог `desktop-core/tools/project-auditor/` с файлом `index.ts`. Файл **пустой** — логика аудитора проекта в Tauri-приложении не реализована и из приложения не вызывается.

---

## 5. Промпты и ИИ

- В кодовой базе **papa-yu (Tauri + UI) нет ни одного промпта** к внешним ИИ/LLM и нет интеграции с API языковых моделей.
- **Чат с агентом** (`ChatAgent.tsx`): ответ агента — фиксированная строка: *«Ответ ИИ агента будет отображаться здесь. Результаты действий агента подключаются к backend.»* — выводится через `setTimeout` через 500 ms после отправки сообщения пользователем. То есть реализована только **заглушка диалога**; реальный диалог с ИИ и промпты планируются к подключению позже.

---

## 6. Связь с другими папками (по документации)

По файлу **СИНХРОНИЗАЦИЯ_ПАПОК.md**:

- **`~/Desktop/папа-ю`** — документация и ТЗ (спеки, планы). Кода нет; используется как ориентир.
- **`~/PAPA/PAPA-YU`** — полная версия на **Electron** + React (Dashboard, Tasks, Policy Engine, Chat и др.). Запуск: `npm run dev:electron` / `npm run build:electron`. Рассматривается как источник фич для переноса в Tauri-версию.
- **`~/papa-yu`** — основное десктоп-приложение на **Tauri** + React; единая точка запуска и текущая разработка.

Текущий отчёт относится только к коду в **`~/papa-yu`** (и при необходимости к упомянутому в нём `desktop-core` и `index/manifest.json`).

---

## 7. Краткие выводы

1. **Архитектура:** двухслойная — Tauri 2 (оболочка + лог в debug) и SPA на React 19 (Vite 7, HashRouter, Zustand, свой event-bus).
2. **Связи:** роутинг и store синхронизированы (currentRoute); навбар и Dashboard ведут на все заявленные страницы; event-bus и ErrorDisplay заложены, но мало задействованы; **обмена с Rust нет** — кастомных команд и invoke нет.
3. **Разделы:** все перечисленные в ТЗ маршруты присутствуют; часть страниц — заглушки или минимальный UI; задачи и чат работают только на клиенте (чат — с фиксированным ответом).
4. **Backend:** только запуск Tauri и плагин логов; desktop-core/project-auditor пустой.
5. **Промпты:** в проекте papa-yu промптов и интеграции с ИИ нет; чат — заглушка с текстом про будущее подключение к backend.

Документ подготовлен как отчёт по текущему состоянию программы **без предложений по исправлению кода**.
