mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
docs: update codebase quality plan
This commit is contained in:
@@ -14,20 +14,39 @@
|
|||||||
|
|
||||||
1. Сначала stabilизировать существующие проверки и тестовые контракты, а не
|
1. Сначала stabilизировать существующие проверки и тестовые контракты, а не
|
||||||
добавлять новые сложные lint-правила.
|
добавлять новые сложные lint-правила.
|
||||||
2. Старый UI (`src/lib/v1/`, `src/routes/v1/`, `app_v1.css`) и новый UI
|
2. Старый UI (`src/lib/v1/`, `src/routes/v1/`, `app_v1.css`) больше не является
|
||||||
(`src/lib/components/`, `src/routes/` без `v1/`) остаются изолированными.
|
обязательной поддерживаемой версией: текущий production на корневых маршрутах
|
||||||
Глобальное расширение recommended-правил выполняется только в рамках C19.
|
уже достаточно стабилен для использования.
|
||||||
3. `core/` и `theme/` — общие модули. Их изменения проверяются unit-тестами и
|
3. Пока `/v1` существует, старый и новый UI остаются изолированными. Не тратить
|
||||||
smoke-сценариями для обеих веток.
|
время на исправления, тесты и документацию, которые нужны только v1.
|
||||||
4. Изменения делаются небольшими атомарными частями, в соответствии с
|
4. Удаление v1 — реальный следующий cleanup-задача (Q3). Не ждать, пока legacy
|
||||||
|
начнёт мешать, и не тратить время на его поддержку; если задача упирается в
|
||||||
|
v1, Q3 выполняется перед ней.
|
||||||
|
5. `core/` и `theme/` — общие модули. Их изменения проверяются unit-тестами и
|
||||||
|
smoke-сценариями для обеих веток, пока ветка v1 не удалена.
|
||||||
|
6. Изменения делаются небольшими атомарными частями, в соответствии с
|
||||||
`AGENTS.md`.
|
`AGENTS.md`.
|
||||||
5. Каждый новый lint-rule сначала появляется в report-only/warn-only режиме,
|
7. Каждый новый lint-rule сначала появляется в report-only/warn-only режиме,
|
||||||
получает fixtures и тесты, и только после очистки baseline становится
|
получает fixtures и тесты, и только после очистки baseline становится
|
||||||
blocking.
|
blocking.
|
||||||
6. Детали реализации правил остаются в `web/eslint-plugins/README.md`;
|
8. Детали реализации правил остаются в `web/eslint-plugins/README.md`;
|
||||||
`AGENTS.md` содержит краткие обязательные политики, понятные агенту без
|
`AGENTS.md` содержит краткие обязательные политики, понятные агенту без
|
||||||
дополнительных поисков, и ссылки на подробные документы.
|
дополнительных поисков, и ссылки на подробные документы.
|
||||||
|
|
||||||
|
### Политика legacy v1
|
||||||
|
|
||||||
|
- v1 можно удалить; это разрешённый cleanup, а не обязательная работа перед
|
||||||
|
каждой задачей.
|
||||||
|
- Не добавлять новые v1-фичи, не чинить v1-баги и не расширять v1-тесты без
|
||||||
|
прямой зависимости текущей задачи от legacy-кода.
|
||||||
|
- Если задача требует изменений в v1 или общих модулях, сначала выполнить Q3,
|
||||||
|
если это не противоречит атомарности текущей задачи, и продолжить работу
|
||||||
|
только с production-веткой.
|
||||||
|
- Если порядок работ изменится, Q3 можно перенести как целый cleanup, но не
|
||||||
|
возвращать постоянную поддержку v1.
|
||||||
|
- После удаления проверить маршруты, импорты, i18n, тесты, документацию и
|
||||||
|
конфигурацию lint; старые ссылки не оставлять как «источник совместимости».
|
||||||
|
|
||||||
## 2. Что уже есть и что мешает
|
## 2. Что уже есть и что мешает
|
||||||
|
|
||||||
- `i18n/dict-consistency` реализован и подключён как `warn-only`
|
- `i18n/dict-consistency` реализован и подключён как `warn-only`
|
||||||
@@ -129,9 +148,26 @@ pnpm --dir web test:e2e
|
|||||||
- Plural-формы остаются отдельной задачей после Q2 и не смешиваются с этим
|
- Plural-формы остаются отдельной задачей после Q2 и не смешиваются с этим
|
||||||
этапом.
|
этапом.
|
||||||
|
|
||||||
### Q3. Тестовый контракт e2e
|
### Q3. Удалить v1 (следующий cleanup)
|
||||||
|
|
||||||
**Оценка:** M. **Зависимости:** Q0, решение по i18n и генераторам.
|
**Статус:** следующий шаг после Q2. **Оценка:** 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; это отдельная атомарная
|
||||||
|
задача.
|
||||||
|
|
||||||
|
**Готово, когда:** production build и verify зелёные, v1-маршруты и файлы
|
||||||
|
отсутствуют, а ссылки и конфиги не содержат legacy-путей.
|
||||||
|
|
||||||
|
### Q4. Тестовый контракт e2e
|
||||||
|
|
||||||
|
**Оценка:** M. **Зависимости:** Q0–Q3, решение по i18n и генераторам.
|
||||||
|
|
||||||
- Основной locator: `role`, `aria-*`, `getByLabel`, stable `id`/`href`.
|
- Основной locator: `role`, `aria-*`, `getByLabel`, stable `id`/`href`.
|
||||||
- `data-testid` использовать только там, где семантического API недостаточно:
|
- `data-testid` использовать только там, где семантического API недостаточно:
|
||||||
@@ -158,9 +194,9 @@ pnpm --dir web test:e2e
|
|||||||
**Готово, когда:** изменение формулировки, класса или порядка элементов не
|
**Готово, когда:** изменение формулировки, класса или порядка элементов не
|
||||||
ломает поведенческий тест без изменения пользовательского контракта.
|
ломает поведенческий тест без изменения пользовательского контракта.
|
||||||
|
|
||||||
### Q4. Закрыть известные preview-баги
|
### Q5. Закрыть известные preview-баги
|
||||||
|
|
||||||
**Оценка:** M. **Зависимости:** Q3.
|
**Оценка:** M. **Зависимости:** Q4.
|
||||||
|
|
||||||
1. Выбрать поведение `resize-png` и `crop-png` при загрузке изображения:
|
1. Выбрать поведение `resize-png` и `crop-png` при загрузке изображения:
|
||||||
source-aware defaults, осмысленные статические defaults или отдельный
|
source-aware defaults, осмысленные статические defaults или отдельный
|
||||||
@@ -178,9 +214,9 @@ pnpm --dir web test:e2e
|
|||||||
**Готово, когда:** каждый known issue либо исправлен и покрыт зелёным тестом,
|
**Готово, когда:** каждый known issue либо исправлен и покрыт зелёным тестом,
|
||||||
либо явно перенесён в отдельную продуктовую задачу с владельцем и критерием.
|
либо явно перенесён в отдельную продуктовую задачу с владельцем и критерием.
|
||||||
|
|
||||||
### Q5. Расширение unit и browser-покрытия
|
### Q6. Расширение unit и browser-покрытия
|
||||||
|
|
||||||
**Оценка:** M–L. **Зависимости:** Q3, Q4.
|
**Оценка:** M–L. **Зависимости:** Q4, Q5.
|
||||||
|
|
||||||
Сначала:
|
Сначала:
|
||||||
|
|
||||||
@@ -200,9 +236,9 @@ pnpm --dir web test:e2e
|
|||||||
Не применять один одинаковый smoke-сценарий к image-, text-, generator- и
|
Не применять один одинаковый smoke-сценарий к image-, text-, generator- и
|
||||||
file-result-инструментам.
|
file-result-инструментам.
|
||||||
|
|
||||||
### Q6. Укрепление lint-инфраструктуры
|
### Q7. Укрепление lint-инфраструктуры
|
||||||
|
|
||||||
**Оценка:** M. **Зависимости:** Q1, Q2.
|
**Оценка:** M. **Зависимости:** Q1, Q2, Q3.
|
||||||
|
|
||||||
- Очистить или использовать unused design tokens; после очистки решить, должен
|
- Очистить или использовать unused design tokens; после очистки решить, должен
|
||||||
ли unused audit быть fail-режимом.
|
ли unused audit быть fail-режимом.
|
||||||
@@ -214,9 +250,9 @@ file-result-инструментам.
|
|||||||
hardcoded colors наравне со Svelte styles.
|
hardcoded colors наравне со Svelte styles.
|
||||||
- Новые правила подключать только после fixtures, `test:rules` и baseline.
|
- Новые правила подключать только после fixtures, `test:rules` и baseline.
|
||||||
|
|
||||||
### Q7. Новые автоматические правила
|
### Q8. Новые автоматические правила
|
||||||
|
|
||||||
**Оценка:** L. **Зависимости:** Q3, Q6.
|
**Оценка:** L. **Зависимости:** Q4, Q7.
|
||||||
|
|
||||||
#### Дублирование HTML/Svelte-разметки
|
#### Дублирование HTML/Svelte-разметки
|
||||||
|
|
||||||
@@ -225,8 +261,7 @@ file-result-инструментам.
|
|||||||
|
|
||||||
- минимальный размер клона;
|
- минимальный размер клона;
|
||||||
- нормализацию Svelte blocks и динамических классов;
|
- нормализацию Svelte blocks и динамических классов;
|
||||||
- список допустимых fixture/allowlist-случаев;
|
- список допустимых fixture/allowlist-случаев.
|
||||||
- исключение `v1`.
|
|
||||||
|
|
||||||
Только после оценки false positives выбирать между готовым detector и
|
Только после оценки false positives выбирать между готовым detector и
|
||||||
собственным AST-правилом. Не включать detector в blocking gate сразу.
|
собственным AST-правилом. Не включать detector в blocking gate сразу.
|
||||||
@@ -256,7 +291,8 @@ Blanket-запрет всех string literals не использовать.
|
|||||||
|
|
||||||
1. Какой набор команд считается полным quality gate и что означает успешный
|
1. Какой набор команд считается полным quality gate и что означает успешный
|
||||||
результат при warnings.
|
результат при warnings.
|
||||||
2. Старый/new scope и запрет глобального расширения lint до C19.
|
2. Старый/new scope и политику v1: v1 можно удалить, но пока он существует, не
|
||||||
|
расширять на него новые правила и не тратить время на его поддержку.
|
||||||
3. Политику e2e: semantic locators, допустимый `data-testid`, запрет
|
3. Политику e2e: semantic locators, допустимый `data-testid`, запрет
|
||||||
бессмысленных counts/classes/alt/exact prose.
|
бессмысленных counts/classes/alt/exact prose.
|
||||||
4. Политику i18n: новые пользовательские тексты через i18n; registry source,
|
4. Политику i18n: новые пользовательские тексты через i18n; registry source,
|
||||||
@@ -320,8 +356,8 @@ history или пересоздают как новый активный док
|
|||||||
| `docs/README.md` | Индекс активных документов, карта источников истины и краткий порядок чтения для агента | Q0; при добавлении нового активного документа |
|
| `docs/README.md` | Индекс активных документов, карта источников истины и краткий порядок чтения для агента | Q0; при добавлении нового активного документа |
|
||||||
| `docs/agent-workflow.md` | Подробный workflow: исследование, изменение, проверка, работа с legacy и обновление документации | Q0–Q1; только для процессов, не описанных кратко в `AGENTS.md` |
|
| `docs/agent-workflow.md` | Подробный workflow: исследование, изменение, проверка, работа с legacy и обновление документации | Q0–Q1; только для процессов, не описанных кратко в `AGENTS.md` |
|
||||||
| `docs/quality-gates.md` | Команды проверки, semantics errors/warnings, порядок запуска и требования CI | Q1; при изменении scripts/config/CI |
|
| `docs/quality-gates.md` | Команды проверки, semantics errors/warnings, порядок запуска и требования CI | Q1; при изменении scripts/config/CI |
|
||||||
| `docs/testing-strategy.md` | Слои тестов, locator policy, i18n assertions, fixtures, `test.fixme` и правила e2e | Q3; при изменении тестовой архитектуры |
|
| `docs/testing-strategy.md` | Слои тестов, locator policy, i18n assertions, fixtures, `test.fixme` и правила e2e | Q4; при изменении тестовой архитектуры |
|
||||||
| `docs/architecture-overview.md` | Карта `core`, registry, executor, нового UI и `/v1`, shared-модули и зависимости | Q4 или перед крупным рефакторингом; не дублировать существующие планы |
|
| `docs/architecture-overview.md` | Карта `core`, registry, executor, нового UI и `/v1`, shared-модули и зависимости | Q5 или перед крупным рефакторингом; не дублировать существующие планы |
|
||||||
| `web/eslint-plugins/README.md` | Детали custom lint rules, token policy и fixtures | Уже существует; менять только вместе с правилами |
|
| `web/eslint-plugins/README.md` | Детали custom lint rules, token policy и fixtures | Уже существует; менять только вместе с правилами |
|
||||||
| `docs/archive/README.md` | Политика временного архива, даты и удаления через 30 дней | Q0; обновлять при изменении архивной политики |
|
| `docs/archive/README.md` | Политика временного архива, даты и удаления через 30 дней | Q0; обновлять при изменении архивной политики |
|
||||||
|
|
||||||
@@ -334,19 +370,19 @@ checklist. `README.md` в корне остаётся кратким обзор
|
|||||||
|
|
||||||
1. **Q0** — синхронизация backlog/checklist/AGENTS.
|
1. **Q0** — синхронизация backlog/checklist/AGENTS.
|
||||||
2. **Q1** — `verify` и PR quality gate.
|
2. **Q1** — `verify` и PR quality gate.
|
||||||
3. **Q3** — тестовый контракт и stale-тесты.
|
3. **Q2** — i18n parity и strict warning gate.
|
||||||
4. **Q4** — preview-баги и снятие `fixme`.
|
4. **Q3** — удалить v1 отдельной атомарной задачей.
|
||||||
5. **Q2** — i18n parity и strict warning gate.
|
5. **Q4** — тестовый контракт и stale-тесты для production UI.
|
||||||
6. **Q6** — тесты lint-инфраструктуры и unused tokens.
|
6. **Q5** — preview-баги и снятие `fixme`.
|
||||||
7. **Q5** — расширенное покрытие.
|
7. **Q6** — расширенное покрытие.
|
||||||
8. **Q7** — report-only duplicate/text audits; blocking — только после baseline.
|
8. **Q7** — тесты lint-инфраструктуры и unused tokens.
|
||||||
|
9. **Q8** — report-only duplicate/text audits; blocking — только после baseline.
|
||||||
|
|
||||||
Каждый PR должен быть атомарным и небольшим; не объединять `SchemaPreview`
|
Каждый PR должен быть атомарным и небольшим; не объединять `SchemaPreview`
|
||||||
refactor, новые i18n-правила и исправление продуктовых багов в одну работу.
|
refactor, новые i18n-правила и исправление продуктовых багов в одну работу.
|
||||||
|
|
||||||
## 6. Отложить за пределы этого плана
|
## 6. Отдельные направления и что не начинать автоматически
|
||||||
|
|
||||||
- удаление `/v1` и глобальное расширение recommended (C19);
|
|
||||||
- полноценный browser/visual/coverage matrix;
|
- полноценный browser/visual/coverage matrix;
|
||||||
- полноценная PWA/API/WASM-платформа;
|
- полноценная PWA/API/WASM-платформа;
|
||||||
- `SchemaPreview` state/view-model refactor;
|
- `SchemaPreview` state/view-model refactor;
|
||||||
|
|||||||
Reference in New Issue
Block a user