[CL-REACT-DOCTOR-ACADEMY] refactor(AcademyCourseForm): чистим 16 react-doctor warnings + smoke-test (100% closure) #118

Merged
andrei merged 1 commit from feature/claude-academy-course-form-warnings-cleanup into master 2026-05-21 16:26:49 +00:00
Owner

Что сделано

  • Functional setState pattern для 12 input onChange — rule rerender-functional-setstate
  • Убран font-bold из 2 h2 заголовков — rule design-no-bold-heading
  • Tailwind 4 size-shorthand на 2 checkboxes (h-4 w-4size-4) — rule design-no-redundant-size-axes
  • Новый smoke test (9 кейсов покрывают CourseFormModal + AssignModulesModal)

Зачем

Phase 2 hygiene #6. 100% closure третий раз подряд (после PR #115 MailInbox + PR #116 MailCompose). GitNexus impact: LOW (leaf admin form).

До После
16 warnings 0 warnings
0 errors 0 errors
0 tests 9/9 PASS

План тестирования

  • tsc + i18n usage clean
  • vitest 9/9 PASS
  • react-doctor: 16 → 0, app errors=0
  • CI 8/8 expected

Где могу ошибаться

  • Functional setState behavioral idempotent (improves React batching)
  • h2 без font-bold — browser default bold, визуально идентично
  • AssignModulesModal noModulesAssigned появляется в обеих секциях (assigned/available) когда пусты — test использует getAllByText
  • Mock ./types per-test scope, Rule E не triggered
## Что сделано - Functional setState pattern для 12 input onChange — rule `rerender-functional-setstate` - Убран `font-bold` из 2 h2 заголовков — rule `design-no-bold-heading` - Tailwind 4 size-shorthand на 2 checkboxes (`h-4 w-4` → `size-4`) — rule `design-no-redundant-size-axes` - Новый smoke test (9 кейсов покрывают CourseFormModal + AssignModulesModal) ## Зачем Phase 2 hygiene #6. **100% closure третий раз подряд** (после PR #115 MailInbox + PR #116 MailCompose). GitNexus impact: LOW (leaf admin form). | До | После | |---|---| | 16 warnings | **0 warnings** | | 0 errors | 0 errors | | 0 tests | 9/9 PASS | ## План тестирования - tsc + i18n usage clean - vitest 9/9 PASS - react-doctor: 16 → 0, app errors=0 - CI 8/8 expected ## Где могу ошибаться - Functional setState behavioral idempotent (improves React batching) - h2 без font-bold — browser default bold, визуально идентично - AssignModulesModal `noModulesAssigned` появляется в обеих секциях (assigned/available) когда пусты — test использует getAllByText - Mock `./types` per-test scope, Rule E не triggered
[CL-REACT-DOCTOR-ACADEMY] refactor(AcademyCourseForm): чистим 16 react-doctor warnings + smoke-test (100% closure)
Some checks failed
React Doctor / React Doctor / App (pull_request) Failing after 621h15m26s
CI / Prisma Migrate Gate (pull_request) Failing after 621h16m18s
CI / Secrets Scan (pull_request) Failing after 621h16m26s
CI / Python SDK (pull_request) Failing after 621h16m54s
CI / Telegram Mini App (pull_request) Failing after 621h17m35s
CI / Contracts (pull_request) Failing after 621h19m1s
CI / App (pull_request) Failing after 621h22m26s
CI / API (pull_request) Failing after 621h25m15s
4aa6a281d0
## Что сделано
- Functional setState pattern для 12 input onChange (slug/title/titleRu/description/descriptionRu/imageUrl/category/level/sortOrder/durationMinutes/isPublished/isFeatured) — rule `rerender-functional-setstate`
- Убран `font-bold` из 2 h2 заголовков (CourseFormModal + AssignModulesModal) — rule `design-no-bold-heading`
- Tailwind 4 size-shorthand на 2 checkboxes (`h-4 w-4` → `size-4`) — rule `design-no-redundant-size-axes`
- Новый smoke test `__tests__/AcademyCourseForm.test.tsx` (9 кейсов): добавление/редактирование header, functional setState (slug sanitize + title), size-4 invariant, drop font-bold для обоих h2, cancel onClose, AssignModulesModal noModulesAssigned

## Зачем
Phase 2 react-doctor hygiene #6. **100% closure третий раз подряд** (после PR #115/#116). 2 компонента в одном файле (CourseFormModal + AssignModulesModal). GitNexus impact: LOW (UNKNOWN от gitnexus stale index но leaf admin form).

| До | После |
|---|---|
| 16 warnings | **0 warnings** |
| 0 errors | 0 errors |
| 0 tests | 9/9 PASS |

## План тестирования
- `cd app && npx tsc --noEmit` — clean
- `cd app && npx vitest run src/pages/admin/admin-academy/__tests__/AcademyCourseForm.test.tsx` — **9/9 PASS**
- `cd app && npm run test:i18n-usage` — Missing: 0
- `cd app && npx react-doctor . --offline --lint -y --json` → AcademyCourseForm 16 → **0**, app errors=0

## Где могу ошибаться
- 12 functional setState — behavioral identical (setState batching improves)
- h2 без font-bold — browser default h1/h2 weight bold, визуально идентично
- AssignModulesModal `noModulesAssigned` появляется в обеих секциях (assigned + available) когда обе пусты — test использует getAllByText
- Test mock для `./types` (useAdminModules + getModuleTitle + getCourseTitle) per-test, Rule E не triggered (helper module не имеет других mocks по grep)
andrei merged commit 414c443b33 into master 2026-05-21 16:26:49 +00:00
andrei deleted branch feature/claude-academy-course-form-warnings-cleanup 2026-05-21 16:26:50 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europatech!118
No description provided.