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

12 KiB
Raw Blame History

Отчёт о выполненных улучшениях

Дата: 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.