Сбор отложенных полировок из 3 ревью feature/digest (PR будет связан).
Code-reviewer
- M3 Comment cycle time UTC boundary semantics
- M4 Reopen test — assert exact count (not just idempotency)
- M6 Comment / coupling slice top-N backend↔frontend
- L1 Shared types package backend↔frontend (или OpenAPI codegen)
- L2 parsePeriod exhaustive check
- L8 Rate limit с CI assertion query-count
Security
- L1 Manual error envelope → AppError throw
- L2 rate-limit console.error → logger
- L3 N+1 ACL → batch SQL (Phase 2 cache, plan I1)
UX
- C1 Topbar tabs as
<div onClick> без клавиатуры — pre-existing across all tabs (Boards/MyTasks/Roadmaps), refactor отдельным PR
- H5 Sparkline color/pattern differentiation (улучшить + data labels у линий)
- M5 Status bar color palette (вместо
s.color || fallback)
- M7 Bar chart numeric axis / max indicator
- M8 formatHours: workdays vs calendar days clarification
- M9 Tab order doc update в SDD §7.3
- M13 Period change feedback (toast + focus)
- L3 Skeleton shape per-card (mirror final layout)
- L21 Stale cached badge "Обновлено N мин назад"
- L22 Hygiene actionable links → filter
/w/:slug?filter=noDueDate
- L24 Empty state иллюстрация (вместо emoji)
- L25 focus-visible vs focus в AntD темах
Verdict
Все CRITICAL и большинство HIGH из ревью зафикшены в основном PR. Остальное — низкий приоритет, бьём отдельно.
Сбор отложенных полировок из 3 ревью feature/digest (PR будет связан).
Code-reviewer
Security
UX
<div onClick>без клавиатуры — pre-existing across all tabs (Boards/MyTasks/Roadmaps), refactor отдельным PRs.color || fallback)/w/:slug?filter=noDueDateVerdict
Все CRITICAL и большинство HIGH из ревью зафикшены в основном PR. Остальное — низкий приоритет, бьём отдельно.