162 lines
12 KiB
Markdown
162 lines
12 KiB
Markdown
# Отчёт о выполненных улучшениях
|
||
|
||
**Дата:** 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) P0–P1 — Убрать зависимость от `$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) P1–P2 — Контракты между 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) P1–P2 — Безопасность
|
||
|
||
### Проверено (без изменений кода)
|
||
|
||
- **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.
|