Skip to content

Latest commit

 

History

History
81 lines (53 loc) · 9.26 KB

File metadata and controls

81 lines (53 loc) · 9.26 KB

Оценка состояния проекта и план исправлений

Дата: 2026-07-02

Статус обновлён: 2026-07-03

Краткое резюме

Проект в отличном состоянии — на уровне хорошей продакшн-практики. Линт и типизация чистые, 75/75 юнит-тестов зелёные, e2e зелёные, production-сборка проходит, уязвимостей в зависимостях ноль. Бэклог аудита от 2026-06-28 отработан: batch export реализован, video.ts разбит на модули, добавлены golden-тесты паритета CPU/worker/WebGL, добавлены бюджеты производительности.

Из исходных быстрых задач закрыты вес демо-изображений, автоматическая проверка доступности и периодические кросс-браузерные прогоны. Рефакторинг крупных модулей и остальные архитектурные задачи отложены до завершения редизайна.

Оценка по критериям

Архитектура — сильно

  • Framework-agnostic движок обработки (src/engine) отделён от React-слоя (components, hooks), пресеты вынесены в данные (presets).
  • Тяжёлые операции вынесены в Web Workers, есть CPU-фолбэк при недоступности WebGL.
  • Главный риск прошлого аудита (дрейф между CPU-, воркер- и WebGL-реализациями конвейера) закрыт golden-тестами паритета.
  • Остаточная проблема: Editor.tsx (1109 строк), webgl/processor.ts (822) и RecipePanel.tsx (600) несут несколько ответственностей одновременно.

Качество кода и типизация — сильно

  • TypeScript в strict-режиме с noUnusedLocals / noUnusedParameters.
  • ESLint 9 с react-hooks проходит без предупреждений, tsc -b чистый.
  • Рецепты валидируются в рантайме через схемы (engine/schemas.ts).

Тестирование — сильно

  • Три уровня: 16 файлов юнит-тестов (75 тестов, включая инварианты реестра рецептов и golden-паритет движка), 17 e2e-спеков Playwright (~1260 строк) с кросс-браузерными прогонами и видео-фикстурами, отдельные бюджеты производительности (performance-budgets.spec.ts).
  • Пробел: нет компонентных тестов React-слоя — покрыт только движок, UI держится целиком на e2e.

CI/CD — хорошо

  • GitHub Actions: линт → юнит → сборка → e2e (Chromium), отчёт Playwright загружается при падении, concurrency с отменой устаревших прогонов, минимальные permissions.
  • Основной CI гоняет Chromium на каждом push/PR; отдельный scheduled/manual workflow проверяет Firefox и mobile-chrome, не замедляя каждый push.
  • Шаг деплоя отсутствует; решение отложено до проверки текущей схемы хостинга после редизайна.

Безопасность и зависимости — хорошо

  • npm audit — 0 уязвимостей, включая dev-зависимости.
  • Privacy-first архитектура (файлы не покидают браузер) снимает целый класс рисков.
  • React 18 при актуальном 19 и Tailwind 3 при актуальном 4 — осознанно-консервативный выбор, не долг.

Производительность — хорошо

  • Основной JS-бандл 468 KB (137 KB gzip) — нормально для приложения с обработкой изображений; воркеры и piexif выделены в отдельные чанки, LUT-PNG грузятся по требованию.
  • Три загружаемых demo-фото переведены из JPEG в WebP: их суммарный сборочный вес снижен примерно с 3,7 до 1,7 MB без изменения разрешения.

SEO / PWA — хорошо

  • Есть sitemap.xml, robots.txt, og-image, manifest.webmanifest, полный набор фавиконов, скрипт генерации SEO-ассетов.
  • Manifest есть, но service worker отсутствует — офлайн-режим не реализован, хотя для privacy-first приложения он напрашивается.

Доступность — автоматически проверяется

  • Radix-примитивы и клавиатурные шорткаты с e2e-покрытием остаются фундаментом.
  • Добавлен axe/Playwright smoke-набор для playable demo, редактора, Help и Crop. При внедрении исправлены недостаточный контраст мелкого текста и вложенные интерактивные элементы карточек пресетов.
  • Axe не заменяет ручную проверку экранным диктором, масштабирования и сложных жестовых сценариев; такую проверку стоит провести на этапе стабилизации 2.0.

Документация и процесс — сильно

  • README с архитектурой и объяснением предметной области, roadmap с критериями перехода между этапами, двуязычный аудит с приоритизированным бэклогом, AGENTS.md.
  • Бэклог аудита реально исполняется: batch export, разбиение video.ts, golden-тесты — всё из таблицы P1/P2 сделано.

План исправлений

Приоритет Задача Статус Устраняемый риск Ценность Усилия
P1 Пережать демо-JPEG (img/, ассеты лендинга) в WebP Выполнено 2026-07-03 Самый тяжёлый контент страницы замедляет первую загрузку Высокая S
P1 Добавить @axe-core/playwright в ключевые e2e-спеки Выполнено 2026-07-03 Регрессии ARIA/контрастов не ловятся Высокая S-M
P2 Включить Firefox и мобильный Chromium в scheduled/manual CI Выполнено 2026-07-03 Кросс-браузерные регрессии обнаруживаются только локально Средняя S-M
P2 Распилить Editor.tsx (1109 строк) на подкомпоненты/хуки по ответственностям После редизайна Изменения в редакторе имеют большой радиус воздействия, сложно ревьюить Средняя M
P2 Добавить service worker для офлайн-режима после определения продуктового offline-сценария и стратегии обновлений После редизайна Privacy-first приложение не работает без сети Средняя M
P3 Добавить точечные компонентные тесты React-слоя после выделения критичных компонентов После редизайна UI-логика покрыта преимущественно e2e Средняя M
P3 Разгрузить webgl/processor.ts (822) и RecipePanel.tsx (600) После редизайна, по мере затрагивания Несколько ответственностей в одном модуле Низкая-средняя M
P3 Проверить текущую схему хостинга и при необходимости добавить deploy job После редизайна Риск расхождения между main и production Средняя S-M

Правило согласования с roadmap

Основной приоритет проекта — mobile redesign (roadmap). Быстрые задачи, не конфликтующие с ним, выполнены. Рефакторинг Editor.tsx, RecipePanel.tsx, service worker, компонентные тесты и решение по deploy выполняются после редизайна либо вместе с затрагивающим их этапом, чтобы не переписывать одно и то же дважды.