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