mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
feat: remove v1 routes and libs
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# План: линтеры, тесты и качество кодовой базы
|
||||
|
||||
> Статус: **draft — на ревью**.
|
||||
> Статус: **draft — Q0–Q3 готовы к ревью; Q4 — следующий этап**.
|
||||
>
|
||||
> Источник: `docs/backlog.md`, аудит конфигурации `web/`, e2e-тестов и
|
||||
> инфраструктурных скриптов. До подтверждения плана кодовые изменения не
|
||||
> выполняются.
|
||||
> инфраструктурных скриптов. Q0–Q3 выполнены; Q4–Q8 выполняются отдельными
|
||||
> атомарными шагами.
|
||||
>
|
||||
> Цель: сделать качество кодовой базы воспроизводимым, убрать ложную «зелёность»
|
||||
> проверок, стабилизировать тестовые контракты и только после этого расширять
|
||||
@@ -14,51 +14,40 @@
|
||||
|
||||
1. Сначала stabilизировать существующие проверки и тестовые контракты, а не
|
||||
добавлять новые сложные lint-правила.
|
||||
2. Старый UI (`src/lib/v1/`, `src/routes/v1/`, `app_v1.css`) больше не является
|
||||
обязательной поддерживаемой версией: текущий production на корневых маршрутах
|
||||
уже достаточно стабилен для использования.
|
||||
3. Пока `/v1` существует, старый и новый UI остаются изолированными. Не тратить
|
||||
время на исправления, тесты и документацию, которые нужны только v1.
|
||||
4. Удаление v1 — реальный следующий cleanup-задача (Q3). Не ждать, пока legacy
|
||||
начнёт мешать, и не тратить время на его поддержку; если задача упирается в
|
||||
v1, Q3 выполняется перед ней.
|
||||
5. `core/` и `theme/` — общие модули. Их изменения проверяются unit-тестами и
|
||||
smoke-сценариями для обеих веток, пока ветка v1 не удалена.
|
||||
6. Изменения делаются небольшими атомарными частями, в соответствии с
|
||||
2. Старый UI удалён: production работает на корневых маршрутах, а `/v1/**` и
|
||||
v1-specific код больше не являются частью приложения.
|
||||
3. Не добавлять новые v1-фичи, не чинить v1-баги и не расширять v1-тесты.
|
||||
4. `core/` и `theme/` — общие модули. Их изменения проверяются unit-тестами и
|
||||
smoke-сценариями production-потребителей.
|
||||
5. Изменения делаются небольшими атомарными частями, в соответствии с
|
||||
`AGENTS.md`.
|
||||
7. Каждый новый lint-rule сначала появляется в report-only/warn-only режиме,
|
||||
6. Каждый новый lint-rule сначала появляется в report-only/warn-only режиме,
|
||||
получает fixtures и тесты, и только после очистки baseline становится
|
||||
blocking.
|
||||
8. Детали реализации правил остаются в `web/eslint-plugins/README.md`;
|
||||
7. Детали реализации правил остаются в `web/eslint-plugins/README.md`;
|
||||
`AGENTS.md` содержит краткие обязательные политики, понятные агенту без
|
||||
дополнительных поисков, и ссылки на подробные документы.
|
||||
|
||||
### Политика legacy v1
|
||||
### Политика удаления legacy v1
|
||||
|
||||
- v1 можно удалить; это разрешённый cleanup, а не обязательная работа перед
|
||||
каждой задачей.
|
||||
- Не добавлять новые v1-фичи, не чинить v1-баги и не расширять v1-тесты без
|
||||
прямой зависимости текущей задачи от legacy-кода.
|
||||
- Если задача требует изменений в v1 или общих модулях, сначала выполнить Q3,
|
||||
если это не противоречит атомарности текущей задачи, и продолжить работу
|
||||
только с production-веткой.
|
||||
- Если порядок работ изменится, Q3 можно перенести как целый cleanup, но не
|
||||
возвращать постоянную поддержку v1.
|
||||
- После удаления проверить маршруты, импорты, i18n, тесты, документацию и
|
||||
конфигурацию lint; старые ссылки не оставлять как «источник совместимости».
|
||||
- Q3 — отдельная атомарная cleanup-задача; поддержка v1 не возвращается.
|
||||
- Старые маршруты и UI-файлы удаляются без redirects и без совместимого
|
||||
maintenance-режима.
|
||||
- В рабочей кодовой базе не оставлять UI-v1-пути, исключения или документацию,
|
||||
которые выглядят как действующий источник совместимости.
|
||||
- Исторические упоминания допустимы только в `docs/archive/`.
|
||||
- Будущий API-контракт `POST /v1/process` из `docs/plan-platform.md` не связан с
|
||||
удалённым UI-v1 и остаётся в планах.
|
||||
|
||||
## 2. Что уже есть и что мешает
|
||||
## 2. Текущее состояние quality-контура
|
||||
|
||||
- `i18n/dict-consistency` реализован и подключён как `warn-only`
|
||||
(`web/eslint.config.js:177-188`). Проверки ключей, пустых значений и
|
||||
placeholders есть, но текущий baseline ещё содержит расхождения.
|
||||
- `lint:all` запускает ESLint, Stylelint и token audit
|
||||
(`web/scripts/lint-all.mjs:31-54`), но не запускает typecheck, unit-тесты,
|
||||
Prettier или Playwright.
|
||||
- CI workflow сейчас проверяет только production build
|
||||
(`.github/workflows/deploy.yml:40-53`).
|
||||
- В e2e есть фиксированные числа, точные тексты, CSS-классы и `alt`-селекторы:
|
||||
`web/e2e/catalog.spec.ts:4-55`, `web/e2e/text-and-verdicts.spec.ts:52-101`.
|
||||
- `pnpm verify` объединяет typecheck, unit, rule-тесты, lint, форматирование,
|
||||
docs и production build; deploy выполняет его перед сборкой.
|
||||
- `i18n/dict-consistency` даёт 0 warnings на текущем baseline; отдельный debt —
|
||||
4 unused design tokens от token audit.
|
||||
- В e2e остаются фиксированные числа, точные тексты, CSS-классы и
|
||||
`alt`-селекторы: `web/e2e/catalog.spec.ts:4-55`,
|
||||
`web/e2e/text-and-verdicts.spec.ts:52-101`.
|
||||
- Backlog и реализация расходятся по генераторам: продуктовая заметка требует
|
||||
автоматический запуск без `Generate`-кнопки (`docs/backlog.md:115-122`), а
|
||||
тест ожидает кнопку (`web/e2e/generators.spec.ts:8-16`).
|
||||
@@ -137,9 +126,10 @@ pnpm --dir web test:e2e
|
||||
- `BASE_LOCALE` — единственный источник registry-English fallback для
|
||||
`tools.*.title` и `tools.*.description`; остальные локали требуют физические
|
||||
ключи.
|
||||
- Legacy `tools.*.params` исключён pattern-based policy до отдельной очистки
|
||||
мёртвого словаря; пустые значения и placeholders не подавляются.
|
||||
- Исправлены три реальных RU option-label gaps и удалены неиспользуемые legacy
|
||||
- Временно неиспользуемые `tools.*.params` исключены pattern-based policy до
|
||||
отдельной очистки мёртвого словаря; пустые значения и placeholders не
|
||||
подавляются.
|
||||
- Исправлены три реальных RU option-label gaps и удалены неиспользуемые
|
||||
option-группы из `ru.ts`.
|
||||
- Исправлен tie-break placeholder parity: при равенстве голосов выбирается
|
||||
`BASE_LOCALE`.
|
||||
@@ -148,22 +138,21 @@ pnpm --dir web test:e2e
|
||||
- Plural-формы остаются отдельной задачей после Q2 и не смешиваются с этим
|
||||
этапом.
|
||||
|
||||
### Q3. Удалить v1 (следующий cleanup)
|
||||
### Q3. Удалить UI-v1 (cleanup завершён)
|
||||
|
||||
**Статус:** следующий шаг после Q2. **Оценка:** M. **Зависимости:** Q0, Q1, Q2.
|
||||
**Статус:** выполнен. **Проверено:** `pnpm verify` и production E2E smoke
|
||||
проходят; после проверки обновлены конфиги и активные документы. **Оценка:** M.
|
||||
**Зависимости:** Q0, Q1, Q2.
|
||||
|
||||
- Удалить `web/src/routes/v1/**`, `web/src/lib/v1/**`, `app_v1.css`, v1-specific
|
||||
i18n/tests и оставшиеся v1-ссылки.
|
||||
- Убрать v1 из isolation/lint/test-конфигураций и документации; не оставлять
|
||||
исключения только ради удалённого кода.
|
||||
- Обновить shared `core`/`theme` проверки: после удаления v1 проверять только
|
||||
production-потребителя.
|
||||
- Прогнать `pnpm verify` и отдельный e2e smoke production-маршрутов.
|
||||
- Не выполнять удаление как побочный эффект другого PR; это отдельная атомарная
|
||||
задача.
|
||||
- Удалены `web/src/routes/v1/**`, `web/src/lib/v1/**`, `app_v1.css`, v1-specific
|
||||
i18n/tests и fixtures.
|
||||
- Удалены isolation plugin, его тест и все v1-исключения из lint-конфигураций.
|
||||
- Убраны v1-ссылки из production-кода и активных документов; исторические
|
||||
упоминания остаются в `docs/archive/`.
|
||||
- Проверены production build, verify и отдельный E2E smoke production-маршрутов.
|
||||
|
||||
**Готово, когда:** production build и verify зелёные, v1-маршруты и файлы
|
||||
отсутствуют, а ссылки и конфиги не содержат legacy-путей.
|
||||
**Результат:** `/v1/**`, UI-v1-файлы и legacy-конфигурация отсутствуют;
|
||||
следующий этап — Q4.
|
||||
|
||||
### Q4. Тестовый контракт e2e
|
||||
|
||||
@@ -243,8 +232,6 @@ file-result-инструментам.
|
||||
- Очистить или использовать unused design tokens; после очистки решить, должен
|
||||
ли unused audit быть fail-режимом.
|
||||
- Добавить тесты для token audit и PostCSS HCT-плагина.
|
||||
- Проверить/исправить расхождение документации isolation rule и реально
|
||||
передаваемых options.
|
||||
- Покрыть базовым JS recommended сам код ESLint-плагинов и lint-скриптов.
|
||||
- Отдельно решить, должен ли обычный CSS проходить проверку undefined tokens и
|
||||
hardcoded colors наравне со Svelte styles.
|
||||
@@ -291,8 +278,8 @@ Blanket-запрет всех string literals не использовать.
|
||||
|
||||
1. Какой набор команд считается полным quality gate и что означает успешный
|
||||
результат при warnings.
|
||||
2. Старый/new scope и политику v1: v1 можно удалить, но пока он существует, не
|
||||
расширять на него новые правила и не тратить время на его поддержку.
|
||||
2. Production-scope и политику удаления v1: новые изменения относятся только к
|
||||
production UI; исторические UI-v1-упоминания остаются в архиве.
|
||||
3. Политику e2e: semantic locators, допустимый `data-testid`, запрет
|
||||
бессмысленных counts/classes/alt/exact prose.
|
||||
4. Политику i18n: новые пользовательские тексты через i18n; registry source,
|
||||
@@ -301,7 +288,7 @@ Blanket-запрет всех string literals не использовать.
|
||||
исправление и удаление теста происходят вместе.
|
||||
6. Комментарии и `TODO`/`FIXME` должны объяснять «почему» и иметь ссылку на
|
||||
работу.
|
||||
7. Shared-модули `core`/`theme` требуют проверки обеих веток.
|
||||
7. Shared-модули `core`/`theme` требуют проверки production-потребителей.
|
||||
|
||||
Синтаксические списки ESLint-правил и подробные токены остаются в
|
||||
`web/eslint-plugins/README.md`.
|
||||
@@ -309,7 +296,7 @@ Blanket-запрет всех string literals не использовать.
|
||||
### Политика документации для агентов
|
||||
|
||||
`AGENTS.md` не должен превращаться в полный справочник проекта. В нём оставляем
|
||||
только обязательный рабочий контракт: команды, границы old/new, ключевые
|
||||
только обязательный рабочий контракт: команды, production-scope, ключевые
|
||||
инварианты, исключения и ссылки на подробные документы. Если агенту нужно понять
|
||||
причину или workflow, в `AGENTS.md` должна быть короткая понятная формулировка;
|
||||
длинные примеры, точные процедуры, таблицы и критерии проверки переносятся в
|
||||
@@ -351,15 +338,15 @@ history или пересоздают как новый активный док
|
||||
|
||||
### Какие документы подготовить
|
||||
|
||||
| Документ | Назначение | Когда создавать/обновлять |
|
||||
| ------------------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- |
|
||||
| `docs/README.md` | Индекс активных документов, карта источников истины и краткий порядок чтения для агента | Q0; при добавлении нового активного документа |
|
||||
| `docs/agent-workflow.md` | Подробный workflow: исследование, изменение, проверка, работа с legacy и обновление документации | Q0–Q1; только для процессов, не описанных кратко в `AGENTS.md` |
|
||||
| `docs/quality-gates.md` | Команды проверки, semantics errors/warnings, порядок запуска и требования CI | Q1; при изменении scripts/config/CI |
|
||||
| `docs/testing-strategy.md` | Слои тестов, locator policy, i18n assertions, fixtures, `test.fixme` и правила e2e | Q4; при изменении тестовой архитектуры |
|
||||
| `docs/architecture-overview.md` | Карта `core`, registry, executor, нового UI и `/v1`, shared-модули и зависимости | Q5 или перед крупным рефакторингом; не дублировать существующие планы |
|
||||
| `web/eslint-plugins/README.md` | Детали custom lint rules, token policy и fixtures | Уже существует; менять только вместе с правилами |
|
||||
| `docs/archive/README.md` | Политика временного архива, даты и удаления через 30 дней | Q0; обновлять при изменении архивной политики |
|
||||
| Документ | Назначение | Когда создавать/обновлять |
|
||||
| ------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
||||
| `docs/README.md` | Индекс активных документов, карта источников истины и краткий порядок чтения для агента | Q0; при добавлении нового активного документа |
|
||||
| `docs/agent-workflow.md` | Подробный workflow: исследование, изменение, проверка и обновление документации | Q0–Q1; только для процессов, не описанных кратко в `AGENTS.md` |
|
||||
| `docs/quality-gates.md` | Команды проверки, semantics errors/warnings, порядок запуска и требования CI | Q1; при изменении scripts/config/CI |
|
||||
| `docs/testing-strategy.md` | Слои тестов, locator policy, i18n assertions, fixtures, `test.fixme` и правила e2e | Q4; при изменении тестовой архитектуры |
|
||||
| `docs/architecture-overview.md` | Карта `core`, registry, executor, production UI и shared-модулей | Q5 или перед крупным рефакторингом; не дублировать существующие планы |
|
||||
| `web/eslint-plugins/README.md` | Детали custom lint rules, token policy и fixtures | Уже существует; менять только вместе с правилами |
|
||||
| `docs/archive/README.md` | Политика временного архива, даты и удаления через 30 дней | Q0; обновлять при изменении архивной политики |
|
||||
|
||||
Не создавать отдельные `docs/commands.md`, `docs/known-issues.md` или копию
|
||||
backlog: команды принадлежат `quality-gates`, известные проблемы — backlog и
|
||||
@@ -392,11 +379,9 @@ refactor, новые i18n-правила и исправление продук
|
||||
|
||||
## 7. Решения, которые нужно принять на ревью
|
||||
|
||||
- Оставляем ли dictionary linter warn-only до очистки или сразу вводим blocking
|
||||
baseline?
|
||||
- Считаем ли `registry.title/description` физическими i18n-ключами или
|
||||
допустимым английским fallback?
|
||||
- Подтверждаем ли auto-run генераторов без кнопки Generate?
|
||||
- Что именно должен делать Reset при включённом auto-run?
|
||||
- Какие semantic locators и допустимые `data-testid` закрепить в Q4?
|
||||
- Какие browser/e2e проверки должны быть обязательными для PR, а какие —
|
||||
отдельным ночным прогоном?
|
||||
- Подтверждаем ли auto-run генераторов без кнопки Generate?
|
||||
- Что именно должен делать Reset при включённом auto-run?
|
||||
- Какие i18n-сценарии проверяются в e2e, а какие остаются unit-проверками?
|
||||
|
||||
Reference in New Issue
Block a user