Frontend полностью переходит на ESLint 10.11.0: Biome удалён из зависимостей, конфигурации и команд, Prettier не установлен, в том числе транзитивно. lint, lint:fix, verify и lint-staged используют единый ESLint-профиль.
Включены полные recommended-пресеты всех установленных плагинов: TypeScript, React, Hooks, Refresh, Query, Unicorn, import-x, SonarJS, RegExp, Security, no-unsanitized, Perfectionist, Stylistic, Vitest, Testing Library, jest-dom и Storybook. Правила применяются в соответствующих source/test/story/config scopes; generated/build artifacts исключены.
Добавлены SonarJS 4.2.1, RegExp 3.3.1, jest-dom 5.10.1, Perfectionist 5.12.1, Stylistic 5.10.0, Security 4.1.0, no-unsanitized 4.1.5 и TypeScript import resolver 4.4.5. Версии остальных существующих пакетов сохранены.
no-unsanitized дополняет React-проверки защитой native DOM HTML API: property и method включены как errors. TypeScript-примеры с innerHTML и insertAdjacentHTML защищены regression checks; исключений для новых правил не потребовалось.
Исходники, тесты, stories и tooling приведены к профилю. Stylistic сохраняет табы, двойные кавычки и точки с запятой. Явно закреплены operator-linebreak: before и multiline-ternary: always-multiline: тернарные выражения остаются в одной строке либо размещают ? и : в начале строк друг под другом; Perfectionist отвечает за сортировку. Обновлены README и conventions.
Разветвлённый рендеринг и наблюдение за ресурсами упрощены у существующих владельцев. Форматирование денежных значений заменяет потенциально медленное регулярное выражение линейной группировкой; добавлены граничные проверки точности и ведущих нулей.
Пять проверок ESLint защищают активацию recommended-правил, области применения/ignores, идемпотентность форматирования, TSX generic-синтаксис, пробелы JSX и запрет inline machine codes. Для текста с интерполяциями настроен jsx-one-expression-per-line: { allow: "non-jsx" }: стандартный автофикс терял значимые пробелы.
Известные UI коды ошибок и типы брокерских операций перенесены в строковые enum. no-restricted-syntax запрещает inline-коды в полях code/errorCode, известные protocol literals, шаблоны и строковые сравнения кодов; no-unsafe-enum-comparison закреплён как error. Проверки ловят и однократное использование; fixtures/stories сохраняют независимые wire values. Новые словари требуют расширения selectors и review.
В app TypeScript config снят erasableSyntaxOnly для поддержки runtime enum; tooling config сохраняет его. Новые зависимости не добавлены. API-коды остаются открытыми строками: неизвестные значения сохраняют прежний fallback; операциям сохранены TAX/FEE/transfer fallback и wire labels.
Контракты и границы
Nullable API fields, ключи запросов и порядок race-операций сохранены; точечные исключения сопровождаются объяснениями. Отдельно проверены auth/session, transport/cache invalidation, денежная валидация и loading/error/empty ветви. React event handlers допускают Promise; их тела остаются под no-floating-promises. Настройки правил учитывают существующие имена файлов, Props/Ref и null на границах React/Mantine/Fetch.
CSS, JSON и Markdown сейчас не форматируются автоматически. jsx-a11y без заявленной поддержки ESLint 10 остаётся отложенным в issue #18. Архитектуру проверяет dependency-cruiser; lint не заменяет semantic/security review.
Проверки
После слияния актуального develop повторно пройдены npm ci и полный npm run verify; новые workflows сохранены без изменений, конфликтов нет.
npm ci — успешно, exact lockfile, без --force/--legacy-peer-deps; официальный npm registry использован из-за недоступности Nexus, настройки registry не менялись.
npm run verify — успешно: OpenAPI snapshot, TypeScript, ESLint с --max-warnings=0, 5 проверок ESLint, 379 тестов в 58 файлах с Chromium и coverage, Knip, оба dependency graphs, Vite и Storybook.
Сравнение 560 переводов и JSX-текста с исходной версией — без изменений; git diff --check — успешно. Pre-commit Gitleaks, lint-staged, dependency check и commitlint прошли.
Остаются предупреждения Vitest о Vite-specific hook, Knip об исключённом расширении .mdx и Storybook о размере chunk; gates проходят.
Frontend полностью переходит на ESLint 10.11.0: Biome удалён из зависимостей, конфигурации и команд, Prettier не установлен, в том числе транзитивно. `lint`, `lint:fix`, `verify` и lint-staged используют единый ESLint-профиль.
Работа по [WealthLedger/main#18](https://git.personal.ksv741.ru/WealthLedger/main/issues/18).
## Изменения
- Включены полные recommended-пресеты всех установленных плагинов: TypeScript, React, Hooks, Refresh, Query, Unicorn, import-x, SonarJS, RegExp, Security, no-unsanitized, Perfectionist, Stylistic, Vitest, Testing Library, jest-dom и Storybook. Правила применяются в соответствующих source/test/story/config scopes; generated/build artifacts исключены.
- Добавлены SonarJS 4.2.1, RegExp 3.3.1, jest-dom 5.10.1, Perfectionist 5.12.1, Stylistic 5.10.0, Security 4.1.0, no-unsanitized 4.1.5 и TypeScript import resolver 4.4.5. Версии остальных существующих пакетов сохранены.
- `no-unsanitized` дополняет React-проверки защитой native DOM HTML API: `property` и `method` включены как errors. TypeScript-примеры с `innerHTML` и `insertAdjacentHTML` защищены regression checks; исключений для новых правил не потребовалось.
- Исходники, тесты, stories и tooling приведены к профилю. Stylistic сохраняет табы, двойные кавычки и точки с запятой. Явно закреплены `operator-linebreak: before` и `multiline-ternary: always-multiline`: тернарные выражения остаются в одной строке либо размещают `?` и `:` в начале строк друг под другом; Perfectionist отвечает за сортировку. Обновлены README и conventions.
- Разветвлённый рендеринг и наблюдение за ресурсами упрощены у существующих владельцев. Форматирование денежных значений заменяет потенциально медленное регулярное выражение линейной группировкой; добавлены граничные проверки точности и ведущих нулей.
- Пять проверок ESLint защищают активацию recommended-правил, области применения/ignores, идемпотентность форматирования, TSX generic-синтаксис, пробелы JSX и запрет inline machine codes. Для текста с интерполяциями настроен `jsx-one-expression-per-line: { allow: "non-jsx" }`: стандартный автофикс терял значимые пробелы.
- Известные UI коды ошибок и типы брокерских операций перенесены в строковые enum. `no-restricted-syntax` запрещает inline-коды в полях `code`/`errorCode`, известные protocol literals, шаблоны и строковые сравнения кодов; `no-unsafe-enum-comparison` закреплён как error. Проверки ловят и однократное использование; fixtures/stories сохраняют независимые wire values. Новые словари требуют расширения selectors и review.
- В app TypeScript config снят `erasableSyntaxOnly` для поддержки runtime enum; tooling config сохраняет его. Новые зависимости не добавлены. API-коды остаются открытыми строками: неизвестные значения сохраняют прежний fallback; операциям сохранены TAX/FEE/transfer fallback и wire labels.
## Контракты и границы
Nullable API fields, ключи запросов и порядок race-операций сохранены; точечные исключения сопровождаются объяснениями. Отдельно проверены auth/session, transport/cache invalidation, денежная валидация и loading/error/empty ветви. React event handlers допускают Promise; их тела остаются под `no-floating-promises`. Настройки правил учитывают существующие имена файлов, Props/Ref и null на границах React/Mantine/Fetch.
CSS, JSON и Markdown сейчас не форматируются автоматически. `jsx-a11y` без заявленной поддержки ESLint 10 остаётся отложенным в issue #18. Архитектуру проверяет dependency-cruiser; lint не заменяет semantic/security review.
## Проверки
- После слияния актуального develop повторно пройдены `npm ci` и полный `npm run verify`; новые workflows сохранены без изменений, конфликтов нет.
- `npm ci` — успешно, exact lockfile, без `--force`/`--legacy-peer-deps`; официальный npm registry использован из-за недоступности Nexus, настройки registry не менялись.
- `npm run verify` — успешно: OpenAPI snapshot, TypeScript, ESLint с `--max-warnings=0`, 5 проверок ESLint, 379 тестов в 58 файлах с Chromium и coverage, Knip, оба dependency graphs, Vite и Storybook.
- Coverage: statements 92.51%, branches 84.48%, functions 88.54%, lines 93.51%.
- `node --test scripts/test-pre-commit.mjs scripts/check-image-publication.cjs` — 2/2.
- `npm audit --registry=https://registry.npmjs.org --include=dev --audit-level=low` — 0 уязвимостей.
- Сравнение 560 переводов и JSX-текста с исходной версией — без изменений; `git diff --check` — успешно. Pre-commit Gitleaks, lint-staged, dependency check и commitlint прошли.
Остаются предупреждения Vitest о Vite-specific hook, Knip об исключённом расширении .mdx и Storybook о размере chunk; gates проходят.
Enable every plugin recommended preset and replace Biome with ESLint formatting.
Preserve API contracts and JSX whitespace; verify source, tests, builds and tooling.
codex-bot
changed title from chore: add typed ESLint checks #18 to chore: replace Biome with full ESLint profile #182026-09-28 07:32:51 +03:00
Use owner enums for known codes; preserve wire values and unknown fallbacks.
Verified npm ci and verify: 379 tests, 5 lint checks, app and Storybook builds.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Frontend полностью переходит на ESLint 10.11.0: Biome удалён из зависимостей, конфигурации и команд, Prettier не установлен, в том числе транзитивно.
lint,lint:fix,verifyи lint-staged используют единый ESLint-профиль.Работа по WealthLedger/main#18.
Изменения
Включены полные recommended-пресеты всех установленных плагинов: TypeScript, React, Hooks, Refresh, Query, Unicorn, import-x, SonarJS, RegExp, Security, no-unsanitized, Perfectionist, Stylistic, Vitest, Testing Library, jest-dom и Storybook. Правила применяются в соответствующих source/test/story/config scopes; generated/build artifacts исключены.
Добавлены SonarJS 4.2.1, RegExp 3.3.1, jest-dom 5.10.1, Perfectionist 5.12.1, Stylistic 5.10.0, Security 4.1.0, no-unsanitized 4.1.5 и TypeScript import resolver 4.4.5. Версии остальных существующих пакетов сохранены.
no-unsanitizedдополняет React-проверки защитой native DOM HTML API:propertyиmethodвключены как errors. TypeScript-примеры сinnerHTMLиinsertAdjacentHTMLзащищены regression checks; исключений для новых правил не потребовалось.Исходники, тесты, stories и tooling приведены к профилю. Stylistic сохраняет табы, двойные кавычки и точки с запятой. Явно закреплены
operator-linebreak: beforeиmultiline-ternary: always-multiline: тернарные выражения остаются в одной строке либо размещают?и:в начале строк друг под другом; Perfectionist отвечает за сортировку. Обновлены README и conventions.Разветвлённый рендеринг и наблюдение за ресурсами упрощены у существующих владельцев. Форматирование денежных значений заменяет потенциально медленное регулярное выражение линейной группировкой; добавлены граничные проверки точности и ведущих нулей.
Пять проверок ESLint защищают активацию recommended-правил, области применения/ignores, идемпотентность форматирования, TSX generic-синтаксис, пробелы JSX и запрет inline machine codes. Для текста с интерполяциями настроен
jsx-one-expression-per-line: { allow: "non-jsx" }: стандартный автофикс терял значимые пробелы.Известные UI коды ошибок и типы брокерских операций перенесены в строковые enum.
no-restricted-syntaxзапрещает inline-коды в поляхcode/errorCode, известные protocol literals, шаблоны и строковые сравнения кодов;no-unsafe-enum-comparisonзакреплён как error. Проверки ловят и однократное использование; fixtures/stories сохраняют независимые wire values. Новые словари требуют расширения selectors и review.В app TypeScript config снят
erasableSyntaxOnlyдля поддержки runtime enum; tooling config сохраняет его. Новые зависимости не добавлены. API-коды остаются открытыми строками: неизвестные значения сохраняют прежний fallback; операциям сохранены TAX/FEE/transfer fallback и wire labels.Контракты и границы
Nullable API fields, ключи запросов и порядок race-операций сохранены; точечные исключения сопровождаются объяснениями. Отдельно проверены auth/session, transport/cache invalidation, денежная валидация и loading/error/empty ветви. React event handlers допускают Promise; их тела остаются под
no-floating-promises. Настройки правил учитывают существующие имена файлов, Props/Ref и null на границах React/Mantine/Fetch.CSS, JSON и Markdown сейчас не форматируются автоматически.
jsx-a11yбез заявленной поддержки ESLint 10 остаётся отложенным в issue #18. Архитектуру проверяет dependency-cruiser; lint не заменяет semantic/security review.Проверки
npm ciи полныйnpm run verify; новые workflows сохранены без изменений, конфликтов нет.npm ci— успешно, exact lockfile, без--force/--legacy-peer-deps; официальный npm registry использован из-за недоступности Nexus, настройки registry не менялись.npm run verify— успешно: OpenAPI snapshot, TypeScript, ESLint с--max-warnings=0, 5 проверок ESLint, 379 тестов в 58 файлах с Chromium и coverage, Knip, оба dependency graphs, Vite и Storybook.node --test scripts/test-pre-commit.mjs scripts/check-image-publication.cjs— 2/2.npm audit --registry=https://registry.npmjs.org --include=dev --audit-level=low— 0 уязвимостей.git diff --check— успешно. Pre-commit Gitleaks, lint-staged, dependency check и commitlint прошли.Остаются предупреждения Vitest о Vite-specific hook, Knip об исключённом расширении .mdx и Storybook о размере chunk; gates проходят.
chore: add typed ESLint checks #18to chore: replace Biome with full ESLint profile #18