papayu/#U041e#U0422#U0427#U0401#U0422_#U0423#U041b#U0423#U0427#U0428#U0415#U041d#U0418#U0419.md
2026-02-11 22:00:43 +03:00

162 lines
12 KiB
Markdown
Raw Permalink 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.

# Отчёт о выполненных улучшениях
**Дата:** 29 января 2026
**Основа:** план улучшений от P0 до P2 (обновления, пути, скрипт, чистка, диагностика, контракты, безопасность).
---
## 1) P0 — Обновления: довести до рабочего состояния
### Сделано
- **CI (GitHub Actions):**
- **`.github/workflows/ci.yml`** — при push/PR: lint и typecheck UI, `cargo check` backend.
- **`.github/workflows/release.yml`** — при push тега `v*`: сборка на macOS, подпись (если задан `TAURI_SIGNING_PRIVATE_KEY` в Secrets), публикация в GitHub Releases и генерация `latest.json` (опция `includeUpdaterJson: true` в tauri-action).
- **Pubkey:** В конфиге по-прежнему заглушка `REPLACE_WITH_PUBLIC_KEY_AFTER_tauri_signer_generate`. Инструкция по генерации ключей и подстановке публичного ключа — в `СБОРКА_И_ОБНОВЛЕНИЯ.md`.
- **UI «Обновления»:**
- Маршрут **`/updates`**, страница **Updates** (`desktop/ui/src/pages/Updates.tsx`): текущая версия (через getVersion), канал (stable), URL endpoint, кнопка «Проверить обновления», статус (успех/ошибка), лог операций и кнопка «Скопировать лог».
- **Навигация:** В шапку добавлены пункты «Обновления» и «Диагностика» (ссылки на `/updates` и `/diagnostics`).
### Результат
Проверка обновлений вынесена на отдельный экран с логом и копированием. Релизы можно автоматизировать через тег и Secrets; после подстановки pubkey и публикации подписанного релиза кнопка «Проверить обновления» перестаёт быть источником непонятных ошибок.
---
## 2) P0P1 — Убрать зависимость от `$HOME/PAPA-YU`
### Сделано
- **Пути сборки в `tauri.conf.json`:**
- `beforeDevCommand` и `beforeBuildCommand` используют переменную окружения **`PAPAYU_PROJECT_ROOT`** с запасным значением `$HOME/PAPA-YU`:
- `cd "${PAPAYU_PROJECT_ROOT:-$HOME/PAPA-YU}/desktop/ui" && ...`
- При другом расположении репозитория достаточно задать `export PAPAYU_PROJECT_ROOT=/путь/к/PAPA-YU` перед `cargo tauri dev` или `cargo tauri build`.
- **Данные приложения:** Уже используют системные директории Tauri (`app_data_dir`, `app_config_dir`) — не привязаны к $HOME. Пути видны на экране «Диагностика».
- **Миграция со старого пути:** Не реализована (при необходимости можно добавить проверку существования старого каталога и предложение импорта в настройках).
### Результат
Сборка и dev не жёстко привязаны к `$HOME/PAPA-YU`; данные приложения хранятся в системных путях. Единый источник описания путей — `СБОРКА_И_ОБНОВЛЕНИЯ.md`.
---
## 3) P1 — `PAPA YU.command`: устойчивый запуск
### Сделано
- В скрипте явно задана переменная **`SCRIPT_DIR`** как каталог, в котором лежит скрипт: `SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"`, далее `ROOT="$SCRIPT_DIR"`. Путь к .app вычисляется от `ROOT` (т.е. от расположения скрипта), а не от текущей рабочей директории.
- В комментарии указано, что запуск устойчив к текущей директории.
### Результат
Двойной клик по скрипту из любого места (или запуск из терминала с любой cwd) корректно находит `desktop/src-tauri/target/release/bundle/macos/` относительно каталога, где лежит `PAPA YU.command`.
---
## 4) P1 — Чистка/упрощение репозитория
### Сделано
- **desktop-core:** Добавлен **`desktop-core/README.md`** с пометкой, что каталог сохранён для совместимости, а `tools/project-auditor/` основным приложением не используется.
- **index:** Добавлен **`index/README.md`** с пояснением, что `manifest.json` не используется Tauri/UI напрямую.
- **CI:** В `.github/workflows/ci.yml` добавлены шаги **lint** и **typecheck** (UI), а также **cargo check** (backend); они выполняются при push/PR в main/master.
### Результат
Неиспользуемые каталоги помечены; один запуск CI проверяет lint, TypeScript и сборку Rust без полной сборки приложения.
---
## 5) P1 — Стабильность UX: прогресс, ошибки, логи
### Сделано
- **Экран «Диагностика»** (`/diagnostics`, страница **Diagnostics**):
- Версии: приложение (из `get_app_info`), Tauri (getVersion).
- Пути: `app_data_dir`, `app_config_dir` (системные директории Tauri/OS).
- Состояние обновлений: endpoint, требование подписи.
- Кнопки: «Скопировать отчёт» и «Экспортировать логи» (скачивание текстового файла с тем же содержимым).
- **Backend:** Добавлена команда **`get_app_info`** (Rust), возвращающая `version`, `app_data_dir`, `app_config_dir` для отображения на экране диагностики.
- **Человекочитаемые сообщения об ошибках updater** уже были внедрены ранее (в Layout при ошибке проверки обновлений показывается короткое сообщение вместо сырого текста).
### Результат
Единый экран диагностики с версиями, путями и экспортом логов; пользователь может скопировать или сохранить отчёт для поддержки.
---
## 6) P1P2 — Контракты между UI и Tauri
### Сделано
- Добавлен документ **`docs/CONTRACTS.md`**:
- Рекомендуемый формат ответов команд (ok/data, error/code/details).
- Таблица команд: `analyze_project`, `preview_actions`, `apply_actions`, `undo_last`, `get_app_info` (вход/выход, файлы UI).
- Таблица событий: `analyze_progress` (payload, где эмитится/слушается).
- Краткое описание транзакционности apply/undo (snapshot, сессия, last_session.txt).
### Результат
Один источник правды для контрактов UI ↔ Tauri; при изменении форматов можно версионировать payload событий и расширять манифест сессий.
---
## 7) P1P2 — Безопасность
### Проверено (без изменений кода)
- **Capabilities:** В `capabilities/default.json` заданы только: `core:default`, `dialog:allow-open`, `core:event:allow-listen`, `updater:default`, `process:allow-restart`. Доступа к FS или shell нет — принцип наименьших привилегий соблюдён.
- **Валидация путей:** В `apply_actions.rs` и `preview_actions.rs` используется `safe_join` (запрет абсолютных путей и `..`).
- **Updater:** Подпись обязательна; в конфиге задаётся `pubkey`; неподписанные обновления не принимаются.
### Результат
Права минимальны; пути проверяются на бэкенде; обновления требуют подписи.
---
## 8) Что не делалось в рамках этого отчёта
- **P2 — Производительность:** Фоновые задачи, cancel token, виртуализация списков, debounce не реализовывались (оставлены как следующий этап).
- **Миграция с $HOME/PAPA-YU:** Не реализована; при необходимости можно добавить проверку старого пути и UI импорта.
- **Persisted store для «рабочей директории»:** Выбор папки в Задачах по-прежнему не сохраняется глобально в настройках; при желании можно добавить позже.
---
## Сводка изменённых/добавленных файлов
| Файл | Действие |
|------|----------|
| `.github/workflows/ci.yml` | Создан — lint, typecheck, cargo check |
| `.github/workflows/release.yml` | Создан — сборка, подпись, релиз, latest.json |
| `desktop/src-tauri/tauri.conf.json` | Пути сборки через `PAPAYU_PROJECT_ROOT` |
| `desktop/src-tauri/src/commands/get_app_info.rs` | Создан — команда для диагностики |
| `desktop/src-tauri/src/commands/mod.rs` | Подключён get_app_info |
| `desktop/src-tauri/src/lib.rs` | Зарегистрирован get_app_info |
| `desktop/ui/src/config/routes.ts` | Маршруты UPDATES, DIAGNOSTICS |
| `desktop/ui/src/App.tsx` | Роуты /updates, /diagnostics |
| `desktop/ui/src/pages/Updates.tsx` | Создан — экран «Обновления» |
| `desktop/ui/src/pages/Diagnostics.tsx` | Создан — экран «Диагностика» |
| `desktop/ui/src/components/layout/Layout.tsx` | В навбар добавлены «Обновления», «Диагностика» |
| `PAPA YU.command` | Устойчивый путь через SCRIPT_DIR |
| `desktop-core/README.md` | Создан — пометка архива |
| `index/README.md` | Создан — пометка архива |
| `docs/CONTRACTS.md` | Создан — контракты UI ↔ Tauri |
| `СБОРКА_И_ОБНОВЛЕНИЯ.md` | Описание PAPAYU_PROJECT_ROOT и путей |
| `ОТЧЁТ_УЛУЧШЕНИЙ.md` | Этот отчёт |
---
## Рекомендации по следующим шагам
1. Сгенерировать ключи подписи (`npx tauri signer generate`), подставить публичный ключ в `tauri.conf.json`, добавить `TAURI_SIGNING_PRIVATE_KEY` в GitHub Secrets и один раз выпустить релиз по тегу (например `v0.1.0`) — после этого проверка обновлений будет работать полностью.
2. При необходимости добавить в настройки сохранение «последней выбранной папки проекта» и миграцию со старого $HOME/PAPA-YU.
3. При росте нагрузки на анализ/превью — вынести тяжёлые операции в фон с возможностью отмены и добавить debounce/кэш на UI.