feat: remove v1 routes and libs

This commit is contained in:
2026-09-25 16:39:58 +05:00
parent 473b62ef53
commit 16d4288912
91 changed files with 181 additions and 11960 deletions
+61 -76
View File
@@ -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-проверками?