завершённые старты на /races сортируются от ранних к поздним;
шкала графика прогресса переведена на темп мин/км с нулём сверху;
рядом с заголовками списков отображается серое количество стартов.
Проверки:
frontend: npm run build — успешно;
backend: npm run build — успешно;
backend: npm test — блокируется существующим конфликтом Node 24/tsx с top-level await в CJS.
Изменения:
- завершённые старты на /races сортируются от ранних к поздним;
- шкала графика прогресса переведена на темп мин/км с нулём сверху;
- рядом с заголовками списков отображается серое количество стартов.
Проверки:
- frontend: npm run build — успешно;
- backend: npm run build — успешно;
- backend: npm test — блокируется существующим конфликтом Node 24/tsx с top-level await в CJS.
frontend/src/pages/DashboardPage.tsx:306-309: после перевода PaceTrendChart на темп внешний контекст страницы остался про время: aria-label="Динамика времени...", заголовок Прогресс по времени, описание выше — лучше время. Это противоречит новой оси и вводит в заблуждение, в том числе пользователей скринридеров. Обновить на темп (Прогресс по темпу, Темп, мин/км, выше — лучше темп/меньше мин/км).
Проверено: завершённые старты принудительно сортируются через sortByDateAsc; темп считается как секунды / км; reverse: true + min: 0 задают ноль сверху; счётчики серые и доступны; frontend 0.9.4, footer уже показывает версии; frontend/backend build проходят. Backend npm test не запускается из-за существующей Node 24/tsx ошибки top-level await в CJS; frontend-тестов в проекте нет. Diff lean, новых зависимостей/лишних абстракций нет.
Review: есть 1 blocking finding.
- `frontend/src/pages/DashboardPage.tsx:306-309`: после перевода `PaceTrendChart` на темп внешний контекст страницы остался про время: `aria-label="Динамика времени..."`, заголовок `Прогресс по времени`, описание `выше — лучше время`. Это противоречит новой оси и вводит в заблуждение, в том числе пользователей скринридеров. Обновить на темп (`Прогресс по темпу`, `Темп, мин/км`, `выше — лучше темп/меньше мин/км`).
Проверено: завершённые старты принудительно сортируются через `sortByDateAsc`; темп считается как секунды / км; `reverse: true` + `min: 0` задают ноль сверху; счётчики серые и доступны; frontend 0.9.4, footer уже показывает версии; frontend/backend build проходят. Backend `npm test` не запускается из-за существующей Node 24/tsx ошибки top-level await в CJS; frontend-тестов в проекте нет. Diff lean, новых зависимостей/лишних абстракций нет.
Re-review текущего head 880d57d: blocking finding остаётся. frontend/src/pages/DashboardPage.tsx:306-309 всё ещё называет новый pace-график Динамика времени / Прогресс по времени и сообщает выше — лучше время; нужно обновить видимый и aria-текст на темп (мин/км). Остальной diff корректен, git diff --check чист, frontend/backend build проходят. PR пока не approve.
Re-review текущего head `880d57d`: blocking finding остаётся. `frontend/src/pages/DashboardPage.tsx:306-309` всё ещё называет новый pace-график `Динамика времени` / `Прогресс по времени` и сообщает `выше — лучше время`; нужно обновить видимый и aria-текст на темп (мин/км). Остальной diff корректен, `git diff --check` чист, frontend/backend build проходят. PR пока не approve.
Previous blocker: RESOLVED. DashboardPage now consistently describes the section as pace progress, including the aria-label, heading, and explanatory text.
No new blocking findings. Checked:
/races completed starts are forced through sortByDateAsc (earliest to latest); visible counts match the filtered upcoming/completed lists and use the muted gray token.
Pace is calculated as finish seconds / race distance in km; the numeric Y axis uses reverse: true and min: 0, so slower pace is lower and 0 is higher; axis/tooltip labels and Dashboard copy are consistent.
TypeScript/AG Charts types compile; frontend version is 0.9.4 and the footer still exposes client/server versions.
git diff --check is clean; frontend production build passes. Backend npm test remains blocked by the pre-existing tsx/CJS top-level-await failure in backend/test/setup.ts; this PR does not touch it, and the frontend has no test script.
Verdict: APPROVE - no blocking findings.
Independent re-review of current PR head 186accd.
Previous blocker: RESOLVED. DashboardPage now consistently describes the section as pace progress, including the aria-label, heading, and explanatory text.
No new blocking findings. Checked:
- /races completed starts are forced through sortByDateAsc (earliest to latest); visible counts match the filtered upcoming/completed lists and use the muted gray token.
- Pace is calculated as finish seconds / race distance in km; the numeric Y axis uses reverse: true and min: 0, so slower pace is lower and 0 is higher; axis/tooltip labels and Dashboard copy are consistent.
- TypeScript/AG Charts types compile; frontend version is 0.9.4 and the footer still exposes client/server versions.
- Accessibility: semantic headings, labeled distance select, chart aria-label, and keyboard-enabled chart remain intact.
- git diff --check is clean; frontend production build passes. Backend npm test remains blocked by the pre-existing tsx/CJS top-level-await failure in backend/test/setup.ts; this PR does not touch it, and the frontend has no test script.
Verdict: APPROVE - no blocking findings.
Independent final review of PR #49 at head 69cfd3b.
Verdict: no blocking findings.
Checked the complete main...69cfd3b diff, including CHANGELOG.md:
/races completed starts are sorted earliest to latest via sortByDateAsc; counts are shown beside both list headings and mobile tabs using the muted gray token.
Pace chart uses finish seconds / distance km; the numeric Y axis has reverse: true and min: 0, with labels and Dashboard copy consistently describing pace in min/km and 0 at the top.
Frontend version is 0.9.4 in package.json and package-lock.json; footer version display remains present.
TypeScript check and production frontend build pass; git diff --check is clean.
Accessibility remains covered by semantic headings, labeled distance select, chart aria-label, and keyboard-enabled chart.
No frontend test script or new tests exist; backend npm test remains blocked by the pre-existing CJS/top-level-await failure in backend/test/setup.ts, outside this PR.
Previous finding #404 (DashboardPage still described time) is resolved in 186accd and rechecked in the current full diff. No new regressions, security issues, or unnecessary complexity found.
Independent final review of PR #49 at head 69cfd3b.
Verdict: no blocking findings.
Checked the complete main...69cfd3b diff, including CHANGELOG.md:
- /races completed starts are sorted earliest to latest via sortByDateAsc; counts are shown beside both list headings and mobile tabs using the muted gray token.
- Pace chart uses finish seconds / distance km; the numeric Y axis has reverse: true and min: 0, with labels and Dashboard copy consistently describing pace in min/km and 0 at the top.
- Frontend version is 0.9.4 in package.json and package-lock.json; footer version display remains present.
- TypeScript check and production frontend build pass; git diff --check is clean.
- Accessibility remains covered by semantic headings, labeled distance select, chart aria-label, and keyboard-enabled chart.
- No frontend test script or new tests exist; backend npm test remains blocked by the pre-existing CJS/top-level-await failure in backend/test/setup.ts, outside this PR.
Previous finding #404 (DashboardPage still described time) is resolved in 186accd and rechecked in the current full diff. No new regressions, security issues, or unnecessary complexity found.
Independent final review of PR #49 at head 69cfd3b.
Verdict: no blocking findings.
Checked the complete main...69cfd3b diff, including CHANGELOG.md:
/races completed starts are sorted earliest to latest via sortByDateAsc; counts are shown beside both list headings and mobile tabs using the muted gray token.
Pace chart uses finish seconds / distance km; the numeric Y axis has reverse: true and min: 0, with labels and Dashboard copy consistently describing pace in min/km and 0 at the top.
Frontend version is 0.9.4 in package.json and package-lock.json; footer version display remains present.
TypeScript check and production frontend build pass; git diff --check is clean.
Accessibility remains covered by semantic headings, labeled distance select, chart aria-label, and keyboard-enabled chart.
No frontend test script or new tests exist; backend npm test remains blocked by the pre-existing CJS/top-level-await failure in backend/test/setup.ts, outside this PR.
Previous finding #404 (DashboardPage still described time) is resolved in 186accd and rechecked in the current full diff. No new regressions, security issues, or unnecessary complexity found.
Independent final review of PR #49 at head 69cfd3b.
Verdict: no blocking findings.
Checked the complete main...69cfd3b diff, including CHANGELOG.md:
- /races completed starts are sorted earliest to latest via sortByDateAsc; counts are shown beside both list headings and mobile tabs using the muted gray token.
- Pace chart uses finish seconds / distance km; the numeric Y axis has reverse: true and min: 0, with labels and Dashboard copy consistently describing pace in min/km and 0 at the top.
- Frontend version is 0.9.4 in package.json and package-lock.json; footer version display remains present.
- TypeScript check and production frontend build pass; git diff --check is clean.
- Accessibility remains covered by semantic headings, labeled distance select, chart aria-label, and keyboard-enabled chart.
- No frontend test script or new tests exist; backend npm test remains blocked by the pre-existing CJS/top-level-await failure in backend/test/setup.ts, outside this PR.
Previous finding #404 (DashboardPage still described time) is resolved in 186accd and rechecked in the current full diff. No new regressions, security issues, or unnecessary complexity found.
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.
Изменения:
Проверки:
Review: есть 1 blocking finding.
frontend/src/pages/DashboardPage.tsx:306-309: после переводаPaceTrendChartна темп внешний контекст страницы остался про время:aria-label="Динамика времени...", заголовокПрогресс по времени, описаниевыше — лучше время. Это противоречит новой оси и вводит в заблуждение, в том числе пользователей скринридеров. Обновить на темп (Прогресс по темпу,Темп, мин/км,выше — лучше темп/меньше мин/км).Проверено: завершённые старты принудительно сортируются через
sortByDateAsc; темп считается как секунды / км;reverse: true+min: 0задают ноль сверху; счётчики серые и доступны; frontend 0.9.4, footer уже показывает версии; frontend/backend build проходят. Backendnpm testне запускается из-за существующей Node 24/tsx ошибки top-level await в CJS; frontend-тестов в проекте нет. Diff lean, новых зависимостей/лишних абстракций нет.Re-review текущего head
880d57d: blocking finding остаётся.frontend/src/pages/DashboardPage.tsx:306-309всё ещё называет новый pace-графикДинамика времени/Прогресс по времении сообщаетвыше — лучше время; нужно обновить видимый и aria-текст на темп (мин/км). Остальной diff корректен,git diff --checkчист, frontend/backend build проходят. PR пока не approve.Independent re-review of current PR head
186accd.Previous blocker: RESOLVED. DashboardPage now consistently describes the section as pace progress, including the aria-label, heading, and explanatory text.
No new blocking findings. Checked:
Verdict: APPROVE - no blocking findings.
Independent final review of PR #49 at head
69cfd3b.Verdict: no blocking findings.
Checked the complete main...69cfd3b diff, including CHANGELOG.md:
Previous finding #404 (DashboardPage still described time) is resolved in
186accdand rechecked in the current full diff. No new regressions, security issues, or unnecessary complexity found.Independent final review of PR #49 at head
69cfd3b.Verdict: no blocking findings.
Checked the complete main...69cfd3b diff, including CHANGELOG.md:
Previous finding #404 (DashboardPage still described time) is resolved in
186accdand rechecked in the current full diff. No new regressions, security issues, or unnecessary complexity found.