12 KiB
Отчёт о выполненных улучшениях
Дата: 29 января 2026
Основа: план улучшений от P0 до P2 (обновления, пути, скрипт, чистка, диагностика, контракты, безопасность).
1) P0 — Обновления: довести до рабочего состояния
Сделано
-
CI (GitHub Actions):
.github/workflows/ci.yml— при push/PR: lint и typecheck UI,cargo checkbackend..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 |
Этот отчёт |
Рекомендации по следующим шагам
- Сгенерировать ключи подписи (
npx tauri signer generate), подставить публичный ключ вtauri.conf.json, добавитьTAURI_SIGNING_PRIVATE_KEYв GitHub Secrets и один раз выпустить релиз по тегу (напримерv0.1.0) — после этого проверка обновлений будет работать полностью. - При необходимости добавить в настройки сохранение «последней выбранной папки проекта» и миграцию со старого $HOME/PAPA-YU.
- При росте нагрузки на анализ/превью — вынести тяжёлые операции в фон с возможностью отмены и добавить debounce/кэш на UI.