14 KiB
План: дожать перевод инструментов в preview и переезд ветки old/
Статус: переведено 121 из 125; остальные 4 — отложены/закрыты решениями. Текущее состояние: 121 инструмент переведён в
registry-new, старый UI уже живёт на(old)/-маршрутах, линтер-изоляция old↔preview на месте (плагинisolation/no-mixed-imports). Здесь — что сделать, чтобы:
- в preview был весь каталог инструментов (плюс закрыты известные долги);
- физически перенести старую ветку в папки
old/(шаг 37 основного плана);- после переезда провести детальную проверку в реальных условиях и собрать отзывы пользователей (правки поверх — отдельными задачами).
Порядок: перевод остатка → починить известные долги → переезд в
old/→ пользовательская проверка/фидбек → (позже, отдельным решением) удаление старого кода.
Текущая картина (факты)
registry.ts+registry/— 125 инструментов;registry-new/— 121. Не переведены только:png-info(отложен, хвост-фича с exif),compress-pngиreduce-to-size-png(закрыто решениями, см. ниже),watermark-image-png(overlay — единственный реальный остаток).- Preview (
/preview) показывает переведённые; старый UI работает на/-маршрутах (группа(old)/):+page,demo,list-tools,tools/[id]. Переведено всё кроме четырёх хвостов: color 18, filters 3, geometry 13, alpha 13 (+watermark-image в остатке), generate 10 (mix/sort), analyze 12 (6 масок + verify + 5 вердиктов), convert 14 (jpg/webp/bmp + 5 png→texт + 6 text→png), textwatermark-tile-png. - Плагин
isolation/no-mixed-imports(web/eslint-plugins/isolation/) полностью разделяет ветки: старыйlib/registry.ts|/registry/**,lib/registry-helpers.ts,lib/categories.ts,lib/tools/**,lib/components/**(кромеkit/) vs новыйroutes/preview/**,lib/registry-new/**,lib/preview/**,lib/registry-schema.ts,lib/components/kit/**. Общее:core/,i18n/,theme,assets/, корневойlib. - Правило копий (из основного плана): файл, используемый
(old), не трогаем — делаем копию вlib/preview/(пример:lib/preview/tool-icons.ts). - Известные долги (предсуществующие, не создавались нами): ошибка
ToolCard.svelte:19:36(svelte-check), фейлpalette.test.ts(ENOENTsrc/app.css— из-за негоpnpm testкрасный при 607 passed), ~335 design-tokens ошибокlint:allв старых kit-компонентах, a11y-warning вColorField.svelte, пустой ruleset вToggle.svelte, неиспользуемые токены вpreview.css.
Скоуп перевода: переведено всё переводимое (отложено 4 хвоста)
Каталог дожат до предела текущих решений: переведено 121 из 125. Оставшиеся 4 инструмента отложены осознанно (не делаем сейчас):
watermark-image-png(alpha) — отложен. Нужна overlay-механика (второе изображение-знак черезgetOverlay/store + параметры scale/opacity/position/margin/aspect); решается отдельно, вместе с вопросом, как второй источник изображения вписывается в schema-driven preview.png-info— отложен осознанно: будет серьёзно дорабатываться отдельным райзом (exif-теги, редактирование, структурированный вывод), для него нужен свой отдельный случай в UI, не «ещё один text/verdict».compress-png— закрыт как дубликатdecrease-color-count-png: пресеты сжатия 192/96/44 добавлены прямо в схемуdecrease-color-count.reduce-to-size-png— отложен до достройки кнопки Download (backlog №7, «экспорт с лимитом размера»).
Переведено в этом проходе (text-механика)
- Типы:
ToolEntry.input: "file" | "text" | "none",ToolEntry.result: "image" | "text" | "verdict",OutputFormat(mime/ext/ qualityParamId) для download. - Executor:
executeFromText/executeToText/executeTextToText(прямые, без worker), экспорт вpreview/executor/index.ts. - UI:
SchemaTextSource(textarea + Render),SchemaTextResult(кол-блок с Copy/Download .txt или бейдж-вердикт по префиксу Yes/No), интеграция вSchemaPreview/SchemaToolView(режимы file/text/generate, рендер image/text/verdict, скрытие image-download для text-результата). - Инструменты: convert 5×png→text (base64/data-uri/hex/bytes/rgb-values),
6×text→png (base64/data-uri/hex/bytes/rgb-values/svg, +width), analyze
verify-is-png (text→text) и 5 вердиктов (grayscale/file-size/transparent/
orientation). Доработка:
base64ToBytesсужен доUint8Array<ArrayBuffer>(совместимость сdecodeBytes). - Гейты: eslint 0, prettier чист, svelte-check — только предсуществующий
ToolCard, тесты — только предсуществующий фейл
palette.test.ts.
Известные долги перед переездом (завести tasks и закрыть)
По AGENTS.md техдолг «чинится только по заведённым tasks, не игнорируется»:
lint:all (~335 design-tokens в kit), неиспользуемые токены preview.css,
a11y ColorField, пустой ruleset Toggle. Плюс два, мешающих зелёной
проверке до/после переезда: svelte-check error ToolCard.svelte:19:36 и фейл
palette.test.ts (ENOENT src/app.css). После их закрытия целевое состояние
проверок перед переездом: pnpm --dir web exec svelte-check → 0 errors,
pnpm --dir web test → зелёный, pnpm --dir web lint:all → только задокумент.
ированный остаток (или 0).
Шаги перевода остатка (порядок)
- Простые пачки — выполнено: color (18) → filters (3) → geometry (13)
→ alpha (13/14, кроме watermark-image) → generate (10, включая mix/sort
через kind
colors) → analyze-маски (6) → textwatermark-tile-png. - Text-механика — выполнено: типы
input/result+ output-формат, executorexecuteFromText/toText/textToText, UISchemaTextSource/SchemaTextResult+ интеграция в preview, перевод конвертеров convert (5 png→text + 6 text→png) и analyze (verify + 5 вердиктов).png-infoотложен отдельным райзом (exif). - Шаг про overlay не делается —
watermark-image-pngотложен решением (см. «Скоуп перевода» выше), отдельным райзом вместе с вопросом второго источника изображения в schema-driven preview. - После категории —
schema.layoutдля сгруппированных инструментов (шаг 32-33 паттерн) и ручная проверка в/preview.
Переезд в old/ (шаг 37 основного плана)
Скоп-сдвиг: «Scoped-пути двигаются вместе с папками» — обновляется
eslint.config.js(isolation-паттерны и design-tokens glob), не код правила.
- Что переезжает:
lib/registry.ts,lib/registry/**,lib/registry-helpers.ts,lib/categories.ts,lib/tools/**,lib/components/**(кромеkit/) → папкиold/(напримерlib/old/registry …,lib/old/tools,lib/old/components) — то есть всё старое в одном поддереве.routes/(old)/остаётся как есть (уже отделено). - Обновить конфиг плагина
isolation/no-mixed-imports: старые glob-ыlib/registry/**…заменить наlib/old/**(+lib/old/components/**и т.п.), «новое» и «общее» не меняются. Проверить, что правило по-прежнему разделяет (тест фолс-позитивов: временный импорт old↔new ловится). - Импорты внутри старого кода — относительные пути остаются рабочими
(папки двигаются целиком); поправить только то, что ссылалось на
$lib/...в другом стиле. Старые тесты (registry.test.tsи др.) переезжают вместе с исходниками и продолжают проходить. - Гейты переезда:
svelte-check0 errors,pnpm --dir web testзелёный,prettier --check .чистый,lint:all= задокументированный остаток, обе ветки открываются (старая/, новая/preview).
Проверка и сбор отзывов после переезда
- Регресс-чеклист по каталогу — пройти все инструменты в
/preview: дефолты совпадают со старыми, валидация/клампы поведения не меняют, результат эквивалентен старому UI (сверить на одинаковых входах). - Тяжёлые кейсы руками: генераторы, маски, font-style/plate/gradient на
всем наборе, text-source, output-формат. (
watermark-image— позже, после overlay-райза.) - Сбор фидбека — отдельные задачи на каждый найденный фикс; чеклист зафиксировать в этом документе по мере находок (или ссылкой на tasks).
- Сверка каталога с
tools-map.md(покрытие/дедупликацияconvert-png-to-jpg/webp), при необходимости — обновить cards/мета. - Решение об удалении старого — после завершения ревью и фидбека,
отдельным шагом: тогда чистятся
lib/old/**,routes/(old)/**,old.css,exports, изоляционный плагин (glob-ы больше не нужны) и открываются «правило копий»-дубли.
Как ревьюить каждый шаг (гайды)
- Диф на один инструмент (или фундамент без инструментов) < ~500 строк.
- Старый
params/run/defaultParams/sanitizeParamsне изменены; вregistry-newкопия логики +schema(дефолты равны старым). - Старый UI и старые тесты продолжают работать:
pnpm --dir web test,pnpm --dir web exec svelte-check. - Новый инструмент проверяется руками в
/previewend-to-end (применение + сброс дефолтов + смена значений). - После переезда каждый move-шаг гоняет 4 гейта (см. выше).
Оценка трудозатрат
| Часть | Сложность | Оценка |
|---|---|---|
| Простые инструменты (color/filters/geometry/alpha/generate/маски/text) | Низкая-Средняя | выполнено (62 шт) |
| Text-механика + конвертеры/вердикты | Средняя | выполнено (16 шт) |
| watermark-image / png-info / reduce-to-size (отложены решениями) | Высокая | отложено, отдельные райзы |
| Долги (ToolCard, palette.test.ts, lint:all остаток) | Средняя | ~2-4ч |
Переезд в old/ + конфиг плагина + гейты |
Средняя-Низкая | ~2-4ч |
| Проверка/фидбек + правки | Зависит | ~3-6ч |
| Итого | ~9-18ч по фазам |
Оценки ориентировочные; особые случаи — с ревью решения, объём финальных правок по фидбеку не предсказуем.