papayu/AUDIT.md
Yuriy e76236dc55 Initial commit: papa-yu v2.4.4
- Schema version (x_schema_version, schema_hash) в prompt/trace
- Кеш read/search/logs/env (ContextCache) в plan-цикле
- Контекст-диета: MAX_FILES=8, MAX_FILE_CHARS=20k, MAX_TOTAL_CHARS=120k
- Plan→Apply двухфазность, NO_CHANGES, path sanitization
- Protected paths, content validation, EOL normalization
- Trace (PAPAYU_TRACE), redaction (PAPAYU_TRACE_RAW)
- Preview diff, undo/redo, transactional apply

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 11:33:19 +03:00

109 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Полный аудит приложения PAPA YU
**Дата:** 2026-01-28
**Цель:** проверка компонентов, связей UI ↔ backend, исправление отображения блока выбора пути к папкам и заключение.
---
## 1. Структура проекта
| Путь | Назначение |
|------|------------|
| `src/` | React (Vite) — UI |
| `src/pages/Tasks.tsx` | Страница «Задачи» — анализ проекта, выбор папок, preview/apply/undo/redo |
| `src/pages/Dashboard.tsx` | Страница «Панель управления» |
| `src/App.tsx` | Роутинг, Layout (header + main) |
| `src-tauri/src/` | Rust (Tauri) — команды, tx, types |
---
## 2. Проверенные компоненты
### 2.1 UI
- **App.tsx** — маршруты `/` (Tasks), `/control-panel` (Dashboard). Layout: header с навигацией, main с `overflow: visible` (исправлено).
- **Tasks.tsx** — блок «Путь к папке проекта»:
- Расположен **первым** под заголовком «Анализ проекта».
- Секция с `data-section="path-selection"` и классом `tasks-sources`.
- Две кнопки: **«Выбрать папку»** (основная синяя), **«+ Добавить ещё папку»**.
- Список выбранных папок или текст «Папки не выбраны. Нажмите кнопку «Выбрать папку» выше.».
- Ниже: поле ввода пути и кнопка «Отправить».
- **index.css** — правило для `.tasks-sources[data-section="path-selection"]`: `display: block !important`, `visibility: visible !important`, чтобы блок не скрывался.
### 2.2 Связи UI → Backend (invoke)
| Действие в UI | Команда Tauri | Файл Rust |
|---------------|---------------|-----------|
| Загрузка списка папок при монтировании | `get_folder_links` | folder_links.rs |
| Сохранение списка папок | `set_folder_links` (links: { paths }) | folder_links.rs |
| Анализ + preview + apply (пакет) | `run_batch_cmd` (payload: paths, confirm_apply, auto_check, selected_actions) | run_batch.rs |
| Состояние undo/redo | `get_undo_redo_state_cmd` | undo_last.rs, tx/store.rs |
| Откат | `undo_last` | undo_last.rs |
| Повтор | `redo_last` | redo_last.rs |
| Генерация плана (v2.4) | `generate_actions` | generate_actions.rs |
Выбор папки через диалог: `open({ directory: true })` из `@tauri-apps/plugin-dialog` — плагин зарегистрирован в `lib.rs` (`tauri_plugin_dialog::init()`).
---
## 3. Backend (Rust)
### 3.1 Зарегистрированные команды (lib.rs)
- `analyze_project_cmd`, `preview_actions_cmd`, `apply_actions_cmd`, `run_batch_cmd`
- `undo_last`, `undo_available`, `redo_last`, `get_undo_redo_state_cmd`
- `generate_actions`
- `get_folder_links`, `set_folder_links`
### 3.2 Модули
- **commands/** — analyze_project, apply_actions, preview_actions, run_batch, undo_last, redo_last, generate_actions, folder_links, auto_check.
- **tx/** — limits (preflight), store (undo/redo stacks), mod (snapshot_before, rollback_tx, apply_actions_to_disk, collect_rel_paths, write_manifest, read_manifest, etc.).
- **types** — ApplyPayload, ApplyResult, TxManifest, Action, ActionKind, AnalyzeReport, BatchPayload, BatchEvent, etc.
### 3.3 Folder links
- `FolderLinks { paths: Vec<String> }` — сериализуется в `app_data_dir/folder_links.json`.
- `load_folder_links`, `save_folder_links` — используются в `get_folder_links` / `set_folder_links`.
Связь с UI: при загрузке Tasks вызывается `get_folder_links` и при необходимости обновляется `folderLinks`; при добавлении/удалении папки вызывается `set_folder_links`. Формат `{ links: { paths } }` соответствует типу `FolderLinks`.
---
## 4. Внесённые исправления
1. **Блок выбора пути к папке (Tasks.tsx)**
- Секция «Путь к папке проекта» вынесена в начало страницы (сразу под заголовком).
- Заголовок секции: «Путь к папке проекта», подпись с указанием нажать кнопку или ввести путь.
- Кнопки «Выбрать папку» и «+ Добавить ещё папку» оформлены заметно (размер, контраст, тень у основной).
- Добавлены `className="tasks-sources"` и `data-section="path-selection"` для стилей и отладки.
- Секция с рамкой, фоном и `minHeight: 140px`, чтобы блок всегда занимал место и был виден.
- В строке ввода оставлены только поле пути и «Отправить» (дублирующая кнопка «Выбрать папку» убрана, чтобы не путать с блоком выше).
2. **Layout (App.tsx)**
- Для `main` заданы `overflow: visible` и `minHeight: 0`, чтобы контент не обрезался.
3. **Глобальные стили (index.css)**
- Добавлено правило для `.tasks-sources[data-section="path-selection"]`: блок принудительно видим.
---
## 5. Рекомендации после обновления кода
- Перезапустить приложение: `cd papa-yu/src-tauri && cargo tauri dev`.
- В браузере/WebView сделать жёсткое обновление (Ctrl+Shift+R / Cmd+Shift+R), чтобы подтянуть новый UI без кэша.
- Если используется только фронт (Vite): перезапустить `npm run dev` и обновить страницу.
После этого в начале страницы «Задачи» должен отображаться блок «Путь к папке проекта» с кнопками «Выбрать папку» и «+ Добавить ещё папку» и списком выбранных папок.
---
## 6. Заключение
- **Компоненты:** App, Tasks, Dashboard, Layout и точки входа (main.tsx, index.html) проверены; маршруты и вложенность корректны.
- **Связи UI ↔ backend:** вызовы `get_folder_links`, `set_folder_links`, `run_batch_cmd`, `get_undo_redo_state_cmd`, `undo_last`, `redo_last` соответствуют зарегистрированным командам и типам (FolderLinks, BatchPayload, ApplyPayload и т.д.).
- **Исправления:** блок выбора пути к папкам сделан первым и визуально выделен; добавлены гарантии видимости через разметку и CSS; дублирование кнопки убрано.
- **Ошибки:** явных ошибок в компонентах и связях не выявлено. Если на экране по-прежнему не видно кнопок и блока, наиболее вероятны кэш сборки или WebView — выполнить перезапуск и жёсткое обновление по п. 5.
Аудит выполнен. Состояние: **исправления внесены, рекомендации по обновлению даны.**