Исправлена причина скрытой ссылки: /auth/me возвращал локализованную роль Администратор, а frontend проверял role === admin. Backend теперь отдаёт отдельный can_manage_users, вычисленный по той же политике, что защищает /admin/users.
Обычные аккаунты получают роль Пользователь и capability false; серверные проверки /admin/users сохранены и покрыты тестом на 403.
Дубли Лаборатория и Пользователи убраны из кабинета там, где эти действия доступны в шапке. На публичном поиске Пользователи остаются в кабинете, а Лаборатория доступна через поднавигацию.
Версии обновлены до Backend 0.13.2 и Frontend 0.3.3; README синхронизирован.
Фокусированный Playwright preview с синтетическими admin/обычной учётными записями: проверены отсутствие дублей, видимость Users в шапке внутренних маршрутов, сохранение Users в кабинете публичного поиска, запрет обычному пользователю и отсутствие ошибок браузера.
Полный локальный npm test пока блокирует существующая нестабильная проверка splitter до запуска новых route assertions; эту unrelated проверку не менял. CI должен выполнить полный suite в runner-среде.
Production, учётные записи и данные не менялись. PR не слит.
## Изменения
- Исправлена причина скрытой ссылки: `/auth/me` возвращал локализованную роль `Администратор`, а frontend проверял `role === admin`. Backend теперь отдаёт отдельный `can_manage_users`, вычисленный по той же политике, что защищает `/admin/users`.
- Обычные аккаунты получают роль `Пользователь` и capability `false`; серверные проверки `/admin/users` сохранены и покрыты тестом на `403`.
- Дубли `Лаборатория` и `Пользователи` убраны из кабинета там, где эти действия доступны в шапке. На публичном поиске `Пользователи` остаются в кабинете, а `Лаборатория` доступна через поднавигацию.
- Версии обновлены до Backend `0.13.2` и Frontend `0.3.3`; README синхронизирован.
## Проверки
- Backend: `PYTHONPATH=backend python3 -m unittest discover -s backend -p test_*.py -v` — 60 тестов пройдены, 1 штатный skip.
- Python compile, Node syntax checks и `git diff --check` — пройдены.
- Фокусированный Playwright preview с синтетическими admin/обычной учётными записями: проверены отсутствие дублей, видимость Users в шапке внутренних маршрутов, сохранение Users в кабинете публичного поиска, запрет обычному пользователю и отсутствие ошибок браузера.
- Полный локальный `npm test` пока блокирует существующая нестабильная проверка splitter до запуска новых route assertions; эту unrelated проверку не менял. CI должен выполнить полный suite в runner-среде.
Production, учётные записи и данные не менялись. PR не слит.
Проверил весь PR на head a1bb3eab98 против main 8bd2b53469. Новый can_manage_users вычисляется тем же критерием username.casefold() == "admin", что и серверный guard; расширения прав не нашёл. Контракт /auth/login, /auth/me, смены пароля и списка пользователей идёт через _public; версия и packaging согласованы. Оба CI-контекста успешны, но отдельный полный browser check на точном head не проходит.
[P1] Исправьте ожидание в tools/frontend-visual-review/check.cjs:394: после административных сценариев fixtureAccount всё ещё равен passwordChangeAccount с username: "admin", а waitForFunction ждёт #profile-username === "fixture-user". Переключение на ordinaryAccount происходит только ниже, после layoutRegressions (строка 429). В моём независимом запуске дошли до этой строки, затем получили Timeout 30000 ms; сценарий обычного пользователя вообще не выполняется. Ожидайте admin на этом этапе либо перенесите переключение/сценарий, сохранив проверку обычного пользователя. Не ослабляйте существующую проверку splitter: в моём запуске splitterStoredMax.value === max и splitterStoredMin.value === min, разовый сбой у DEV не воспроизведён и требует повторной оценки после исправления таймаута.
[P2] Локализуйте вывод роли для KY и выровняйте fixture списка с реальным API. auth.py теперь возвращает строку «Пользователь», но review.html:1213 и :1362 выводят account.role/user.role без перевода, поэтому кыргызский кабинет и таблица показывают русский текст. В preview-server.cjs и check.cjs строки пользователей по-прежнему имеют role: "user", в то время как реальный list_users() вызывает _public. Добавьте локализованное отображение по стабильному признаку/коду, не используя русскую строку для авторизации, и проверьте RU/KY для admin и ordinary.
[P2] Добавьте в CHANGELOG.md записи о Backend 0.13.2 и Frontend 0.3.3: оба номера повышены в README/коде/footer, но changelog в PR не меняется. Это нужно для прослеживаемости выпуска.
Текущий набор CI не заменяет полный browser check. Production не изменялся; merge/deploy в этой фазе запрещены. После исправлений нужен новый exact-SHA review.
Проверил весь PR на head a1bb3eab984d96419b10732267e1e2d4e8e79862 против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Новый `can_manage_users` вычисляется тем же критерием `username.casefold() == "admin"`, что и серверный guard; расширения прав не нашёл. Контракт `/auth/login`, `/auth/me`, смены пароля и списка пользователей идёт через `_public`; версия и packaging согласованы. Оба CI-контекста успешны, но отдельный полный browser check на точном head не проходит.
[P1] Исправьте ожидание в `tools/frontend-visual-review/check.cjs:394`: после административных сценариев `fixtureAccount` всё ещё равен `passwordChangeAccount` с `username: "admin"`, а `waitForFunction` ждёт `#profile-username === "fixture-user"`. Переключение на `ordinaryAccount` происходит только ниже, после `layoutRegressions` (строка 429). В моём независимом запуске дошли до этой строки, затем получили Timeout 30000 ms; сценарий обычного пользователя вообще не выполняется. Ожидайте admin на этом этапе либо перенесите переключение/сценарий, сохранив проверку обычного пользователя. Не ослабляйте существующую проверку splitter: в моём запуске `splitterStoredMax.value === max` и `splitterStoredMin.value === min`, разовый сбой у DEV не воспроизведён и требует повторной оценки после исправления таймаута.
[P2] Локализуйте вывод роли для KY и выровняйте fixture списка с реальным API. `auth.py` теперь возвращает строку «Пользователь», но `review.html:1213` и `:1362` выводят `account.role`/`user.role` без перевода, поэтому кыргызский кабинет и таблица показывают русский текст. В `preview-server.cjs` и `check.cjs` строки пользователей по-прежнему имеют `role: "user"`, в то время как реальный `list_users()` вызывает `_public`. Добавьте локализованное отображение по стабильному признаку/коду, не используя русскую строку для авторизации, и проверьте RU/KY для admin и ordinary.
[P2] Добавьте в `CHANGELOG.md` записи о Backend 0.13.2 и Frontend 0.3.3: оба номера повышены в README/коде/footer, но changelog в PR не меняется. Это нужно для прослеживаемости выпуска.
Текущий набор CI не заменяет полный browser check. Production не изменялся; merge/deploy в этой фазе запрещены. После исправлений нужен новый exact-SHA review.
Проверил весь PR #57 на head 830e1d0f0d64ee034a67275d8336928ac830f0a2 против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Серверный can_manage_users совпадает с guard, обычный пользователь получает 403; RU/KY-роли и fixture теперь согласованы с API. Навигация кабинета без дублирования, знак лаборатории совпадает с основным SVG; мобильные и клавиатурные проверки проходят после устранения гонки ниже. Сводный CI и runner smoke на этом SHA — success.
[P1] tools/frontend-visual-review/check.cjs:356: после #users-ui-ky.click() тест сразу читает localizedRoleCells, хотя updateUsersLanguage() запускает асинхронный loadUsers(). Заголовок уже «Колдонуучулар», но строка ещё может содержать «Пользователь». Два независимых запуска исходного теста остановились здесь (localizedRoleCells=["Пользователь"]); в диагностической временной копии ожидание появления «Колдонуучу» перед чтением дало полный успешный прогон, включая ordinary-user, splitter, mobile и keyboard проверки. Добавьте ожидание завершения перерисовки строки перед assertion, не ослабляя проверку её KY-текста.
Замечания #304 по неверному ожидаемому username и локализации роли исправлены. Запись версий Backend 0.13.2 / Frontend 0.3.3 в CHANGELOG остаётся на согласованном следующем этапе. Production не изменялся; merge/deploy не выполнялись.
Проверил весь PR #57 на head `830e1d0f0d64ee034a67275d8336928ac830f0a2` против main `8bd2b53469e86e293122f7cf14f45321e40f3aae`. Серверный `can_manage_users` совпадает с guard, обычный пользователь получает 403; RU/KY-роли и fixture теперь согласованы с API. Навигация кабинета без дублирования, знак лаборатории совпадает с основным SVG; мобильные и клавиатурные проверки проходят после устранения гонки ниже. Сводный CI и runner smoke на этом SHA — success.
[P1] `tools/frontend-visual-review/check.cjs:356`: после `#users-ui-ky`.click() тест сразу читает `localizedRoleCells`, хотя `updateUsersLanguage()` запускает асинхронный `loadUsers()`. Заголовок уже «Колдонуучулар», но строка ещё может содержать «Пользователь». Два независимых запуска исходного теста остановились здесь (`localizedRoleCells=["Пользователь"]`); в диагностической временной копии ожидание появления «Колдонуучу» перед чтением дало полный успешный прогон, включая ordinary-user, splitter, mobile и keyboard проверки. Добавьте ожидание завершения перерисовки строки перед assertion, не ослабляя проверку её KY-текста.
Замечания #304 по неверному ожидаемому username и локализации роли исправлены. Запись версий Backend 0.13.2 / Frontend 0.3.3 в CHANGELOG остаётся на согласованном следующем этапе. Production не изменялся; merge/deploy не выполнялись.
Проверил весь PR #57 на head 3620bb734cde02ef653a3a514e449fc8741bd1eb против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Замечания #304 и #305 исправлены: capability совпадает с серверным guard, обычный пользователь получает 403 и не видит управление пользователями; RU/KY роли локализованы, навигация кабинета не дублирует ссылки header, знак лаборатории совпадает с основным SVG. Единственное изменение после #305 — ожидание фактической KY-строки перед проверкой; assertion сохранён. Независимый полный Chromium/Playwright прогон на текущем HEAD прошёл, включая splitter min/max, mobile, keyboard и ordinary-user сценарий. Новых блокирующих замечаний нет.
На момент review CI и runner smoke для этого SHA ещё pending; успешность проверок требуется отдельно до следующей фазы. CHANGELOG для Backend 0.13.2 / Frontend 0.3.3 остаётся согласованным следующим этапом. Это initial review: merge/deploy не выполнялись и не разрешаются этим review.
Проверил весь PR #57 на head `3620bb734cde02ef653a3a514e449fc8741bd1eb` против main `8bd2b53469e86e293122f7cf14f45321e40f3aae`. Замечания #304 и #305 исправлены: capability совпадает с серверным guard, обычный пользователь получает 403 и не видит управление пользователями; RU/KY роли локализованы, навигация кабинета не дублирует ссылки header, знак лаборатории совпадает с основным SVG. Единственное изменение после #305 — ожидание фактической KY-строки перед проверкой; assertion сохранён. Независимый полный Chromium/Playwright прогон на текущем HEAD прошёл, включая splitter min/max, mobile, keyboard и ordinary-user сценарий. Новых блокирующих замечаний нет.
На момент review CI и runner smoke для этого SHA ещё pending; успешность проверок требуется отдельно до следующей фазы. CHANGELOG для Backend 0.13.2 / Frontend 0.3.3 остаётся согласованным следующим этапом. Это initial review: merge/deploy не выполнялись и не разрешаются этим review.
Полное финальное ревью PR #57 на head a153dc87651e38f5be36c1b6dabdef8863f21255 против main 8bd2b53469e86e293122f7cf14f45321e40f3aae. Перепроверены исправления замечаний #304/#305, серверный guard/capability и 403 обычного пользователя, RU/KY-роли, контекстная навигация, SVG бренда, mobile/keyboard/splitter проверки. Полный независимый browser check пройден на предыдущем HEAD; сравнение всех файлов показывает, что новый commit добавил только CHANGELOG. Запись Frontend 0.3.3 / Backend 0.13.2 согласована с README и кодом. Новых замечаний нет. На момент этого review CI финального SHA ожидается; merge допустим только после успешных обязательных проверок и повторной проверки неизменности head/base.
Полное финальное ревью PR #57 на head `a153dc87651e38f5be36c1b6dabdef8863f21255` против main `8bd2b53469e86e293122f7cf14f45321e40f3aae`. Перепроверены исправления замечаний #304/#305, серверный guard/capability и 403 обычного пользователя, RU/KY-роли, контекстная навигация, SVG бренда, mobile/keyboard/splitter проверки. Полный независимый browser check пройден на предыдущем HEAD; сравнение всех файлов показывает, что новый commit добавил только CHANGELOG. Запись Frontend 0.3.3 / Backend 0.13.2 согласована с README и кодом. Новых замечаний нет. На момент этого review CI финального SHA ожидается; merge допустим только после успешных обязательных проверок и повторной проверки неизменности head/base.
agent
merged commit b5adc09203 into main2026-10-24 20:33:30 +00:00
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.
Изменения
/auth/meвозвращал локализованную рольАдминистратор, а frontend проверялrole === admin. Backend теперь отдаёт отдельныйcan_manage_users, вычисленный по той же политике, что защищает/admin/users.Пользовательи capabilityfalse; серверные проверки/admin/usersсохранены и покрыты тестом на403.ЛабораторияиПользователиубраны из кабинета там, где эти действия доступны в шапке. На публичном поискеПользователиостаются в кабинете, аЛабораториядоступна через поднавигацию.0.13.2и Frontend0.3.3; README синхронизирован.Проверки
PYTHONPATH=backend python3 -m unittest discover -s backend -p test_*.py -v— 60 тестов пройдены, 1 штатный skip.git diff --check— пройдены.npm testпока блокирует существующая нестабильная проверка splitter до запуска новых route assertions; эту unrelated проверку не менял. CI должен выполнить полный suite в runner-среде.Production, учётные записи и данные не менялись. PR не слит.
Проверил весь PR на head
a1bb3eab98против main8bd2b53469. Новыйcan_manage_usersвычисляется тем же критериемusername.casefold() == "admin", что и серверный guard; расширения прав не нашёл. Контракт/auth/login,/auth/me, смены пароля и списка пользователей идёт через_public; версия и packaging согласованы. Оба CI-контекста успешны, но отдельный полный browser check на точном head не проходит.[P1] Исправьте ожидание в
tools/frontend-visual-review/check.cjs:394: после административных сценариевfixtureAccountвсё ещё равенpasswordChangeAccountсusername: "admin", аwaitForFunctionждёт#profile-username === "fixture-user". Переключение наordinaryAccountпроисходит только ниже, послеlayoutRegressions(строка 429). В моём независимом запуске дошли до этой строки, затем получили Timeout 30000 ms; сценарий обычного пользователя вообще не выполняется. Ожидайте admin на этом этапе либо перенесите переключение/сценарий, сохранив проверку обычного пользователя. Не ослабляйте существующую проверку splitter: в моём запускеsplitterStoredMax.value === maxиsplitterStoredMin.value === min, разовый сбой у DEV не воспроизведён и требует повторной оценки после исправления таймаута.[P2] Локализуйте вывод роли для KY и выровняйте fixture списка с реальным API.
auth.pyтеперь возвращает строку «Пользователь», ноreview.html:1213и:1362выводятaccount.role/user.roleбез перевода, поэтому кыргызский кабинет и таблица показывают русский текст. Вpreview-server.cjsиcheck.cjsстроки пользователей по-прежнему имеютrole: "user", в то время как реальныйlist_users()вызывает_public. Добавьте локализованное отображение по стабильному признаку/коду, не используя русскую строку для авторизации, и проверьте RU/KY для admin и ordinary.[P2] Добавьте в
CHANGELOG.mdзаписи о Backend 0.13.2 и Frontend 0.3.3: оба номера повышены в README/коде/footer, но changelog в PR не меняется. Это нужно для прослеживаемости выпуска.Текущий набор CI не заменяет полный browser check. Production не изменялся; merge/deploy в этой фазе запрещены. После исправлений нужен новый exact-SHA review.
Проверил весь PR #57 на head
830e1d0f0d64ee034a67275d8336928ac830f0a2против main8bd2b53469e86e293122f7cf14f45321e40f3aae. Серверныйcan_manage_usersсовпадает с guard, обычный пользователь получает 403; RU/KY-роли и fixture теперь согласованы с API. Навигация кабинета без дублирования, знак лаборатории совпадает с основным SVG; мобильные и клавиатурные проверки проходят после устранения гонки ниже. Сводный CI и runner smoke на этом SHA — success.[P1]
tools/frontend-visual-review/check.cjs:356: после#users-ui-ky.click() тест сразу читаетlocalizedRoleCells, хотяupdateUsersLanguage()запускает асинхронныйloadUsers(). Заголовок уже «Колдонуучулар», но строка ещё может содержать «Пользователь». Два независимых запуска исходного теста остановились здесь (localizedRoleCells=["Пользователь"]); в диагностической временной копии ожидание появления «Колдонуучу» перед чтением дало полный успешный прогон, включая ordinary-user, splitter, mobile и keyboard проверки. Добавьте ожидание завершения перерисовки строки перед assertion, не ослабляя проверку её KY-текста.Замечания #304 по неверному ожидаемому username и локализации роли исправлены. Запись версий Backend 0.13.2 / Frontend 0.3.3 в CHANGELOG остаётся на согласованном следующем этапе. Production не изменялся; merge/deploy не выполнялись.
Проверил весь PR #57 на head
3620bb734cde02ef653a3a514e449fc8741bd1ebпротив main8bd2b53469e86e293122f7cf14f45321e40f3aae. Замечания #304 и #305 исправлены: capability совпадает с серверным guard, обычный пользователь получает 403 и не видит управление пользователями; RU/KY роли локализованы, навигация кабинета не дублирует ссылки header, знак лаборатории совпадает с основным SVG. Единственное изменение после #305 — ожидание фактической KY-строки перед проверкой; assertion сохранён. Независимый полный Chromium/Playwright прогон на текущем HEAD прошёл, включая splitter min/max, mobile, keyboard и ordinary-user сценарий. Новых блокирующих замечаний нет.На момент review CI и runner smoke для этого SHA ещё pending; успешность проверок требуется отдельно до следующей фазы. CHANGELOG для Backend 0.13.2 / Frontend 0.3.3 остаётся согласованным следующим этапом. Это initial review: merge/deploy не выполнялись и не разрешаются этим review.
New commits pushed, approval review dismissed automatically according to repository settings
Полное финальное ревью PR #57 на head
a153dc87651e38f5be36c1b6dabdef8863f21255против main8bd2b53469e86e293122f7cf14f45321e40f3aae. Перепроверены исправления замечаний #304/#305, серверный guard/capability и 403 обычного пользователя, RU/KY-роли, контекстная навигация, SVG бренда, mobile/keyboard/splitter проверки. Полный независимый browser check пройден на предыдущем HEAD; сравнение всех файлов показывает, что новый commit добавил только CHANGELOG. Запись Frontend 0.3.3 / Backend 0.13.2 согласована с README и кодом. Новых замечаний нет. На момент этого review CI финального SHA ожидается; merge допустим только после успешных обязательных проверок и повторной проверки неизменности head/base.