Каталог сохранял номер страницы при смене фильтров и мог показывать пустой результат при существующих совпадениях. Фильтры теперь начинают с первой страницы, устаревший offset корректируется в общем обработчике.
Закрывается issue #37: подписанные и сгруппированные фильтры, компактные 5 колонок, пресеты, native dialog и клавиатура, закреплённое ФИО на мобильных экранах, понятные даты/статусы, отдельные empty/error/loading/stale состояния и повторная загрузка. При сбое БД каталог возвращает 503 с сохранением запроса; polling имеет таймаут и защиту от параллельных запросов.
README приведён к текущему Compose (api/worker/postgres), удалённому MCP и версии 0.8.1. Проверки: 58 pytest tests passed; node --check; Playwright desktop/mobile, фильтры, dialog/focus, пресеты и error/retry прошли. Последний документационный коммит a989c5c отдельно проверен: блокирующих замечаний нет.
Каталог сохранял номер страницы при смене фильтров и мог показывать пустой результат при существующих совпадениях. Фильтры теперь начинают с первой страницы, устаревший offset корректируется в общем обработчике.
Закрывается issue #37: подписанные и сгруппированные фильтры, компактные 5 колонок, пресеты, native dialog и клавиатура, закреплённое ФИО на мобильных экранах, понятные даты/статусы, отдельные empty/error/loading/stale состояния и повторная загрузка. При сбое БД каталог возвращает 503 с сохранением запроса; polling имеет таймаут и защиту от параллельных запросов.
README приведён к текущему Compose (api/worker/postgres), удалённому MCP и версии 0.8.1. Проверки: 58 pytest tests passed; node --check; Playwright desktop/mobile, фильтры, dialog/focus, пресеты и error/retry прошли. Последний документационный коммит `a989c5c` отдельно проверен: блокирующих замечаний нет.
Closes #37. PR не сливается автоматически.
[blocking] app/templates/directory.html:135 — aria-labelledby задан на вложенном <section>, а не на самом <dialog>. У native dialog accessible name не будет связан с columns-dialog-title; перенесите aria-labelledby="columns-dialog-title" на <dialog> (или задайте aria-label самому dialog).
[blocking] app/static/admin.js:103-115 — после первой ошибки polling показывается сообщение, но polling прекращается (return false), и пользователю не даётся retry-действие. Это не соответствует issue #37 (ошибка должна иметь действие восстановления) и оставляет прогресс навсегда устаревшим до перезагрузки страницы. Сохраните polling с ограниченным retry/backoff либо добавьте явную кнопку «Повторить».
Non-blocking: не реализованы заявленные presets колонок и отдельное loading/stale-состояние; тесты проверяют строки шаблонов, но не рендеринг Jinja, native dialog/focus flow или поведение polling. compileall проходит; pytest в окружении недоступен. git diff --check также сообщает CRLF/trailing whitespace в новых CSS/HTML-фрагментах.
Итог: blocking issues остаются, PR пока не готов к merge.
Review: есть blocking findings.
1. [blocking] `app/templates/directory.html:135` — `aria-labelledby` задан на вложенном `<section>`, а не на самом `<dialog>`. У native dialog accessible name не будет связан с `columns-dialog-title`; перенесите `aria-labelledby="columns-dialog-title"` на `<dialog>` (или задайте `aria-label` самому dialog).
2. [blocking] `app/static/admin.js:103-115` — после первой ошибки polling показывается сообщение, но polling прекращается (`return false`), и пользователю не даётся retry-действие. Это не соответствует issue #37 (ошибка должна иметь действие восстановления) и оставляет прогресс навсегда устаревшим до перезагрузки страницы. Сохраните polling с ограниченным retry/backoff либо добавьте явную кнопку «Повторить».
Non-blocking: не реализованы заявленные presets колонок и отдельное loading/stale-состояние; тесты проверяют строки шаблонов, но не рендеринг Jinja, native dialog/focus flow или поведение polling. `compileall` проходит; `pytest` в окружении недоступен. `git diff --check` также сообщает CRLF/trailing whitespace в новых CSS/HTML-фрагментах.
Итог: blocking issues остаются, PR пока не готов к merge.
Финальный независимый review PR #38: проверены diff feature/admin-ux-hardening относительно main и ключевые файлы. aria-labelledby находится непосредственно на dialog; polling продолжает работу после ошибок и доступна кнопка «Повторить»; presets колонок подключены; версия 0.8.0 и changelog обновлены. Новых блокирующих регрессий не обнаружено — no blocking findings.
Финальный независимый review PR #38: проверены diff feature/admin-ux-hardening относительно main и ключевые файлы. aria-labelledby находится непосредственно на dialog; polling продолжает работу после ошибок и доступна кнопка «Повторить»; presets колонок подключены; версия 0.8.0 и changelog обновлены. Новых блокирующих регрессий не обнаружено — no blocking findings.
Проверен только последний коммит a989c5c (docs: align version and test instructions).
CHANGELOG.md синхронизирован с версией 0.8.1.
README уточняет, что SQLite используется тестами с данными, а отдельные API smoke-тесты используют текущую конфигурацию приложения.
git diff --check проходит.
По последнему коммиту блокирующих замечаний нет.
Проверен только последний коммит `a989c5c` (`docs: align version and test instructions`).
- `CHANGELOG.md` синхронизирован с версией 0.8.1.
- README уточняет, что SQLite используется тестами с данными, а отдельные API smoke-тесты используют текущую конфигурацию приложения.
- `git diff --check` проходит.
По последнему коммиту блокирующих замечаний нет.
admin
merged commit e1ba77c337 into main2026-09-11 09:50:04 +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.
Каталог сохранял номер страницы при смене фильтров и мог показывать пустой результат при существующих совпадениях. Фильтры теперь начинают с первой страницы, устаревший offset корректируется в общем обработчике.
Закрывается issue #37: подписанные и сгруппированные фильтры, компактные 5 колонок, пресеты, native dialog и клавиатура, закреплённое ФИО на мобильных экранах, понятные даты/статусы, отдельные empty/error/loading/stale состояния и повторная загрузка. При сбое БД каталог возвращает 503 с сохранением запроса; polling имеет таймаут и защиту от параллельных запросов.
README приведён к текущему Compose (api/worker/postgres), удалённому MCP и версии 0.8.1. Проверки: 58 pytest tests passed; node --check; Playwright desktop/mobile, фильтры, dialog/focus, пресеты и error/retry прошли. Последний документационный коммит
a989c5cотдельно проверен: блокирующих замечаний нет.Closes #37. PR не сливается автоматически.
Review: есть blocking findings.
[blocking]
app/templates/directory.html:135—aria-labelledbyзадан на вложенном<section>, а не на самом<dialog>. У native dialog accessible name не будет связан сcolumns-dialog-title; перенеситеaria-labelledby="columns-dialog-title"на<dialog>(или задайтеaria-labelсамому dialog).[blocking]
app/static/admin.js:103-115— после первой ошибки polling показывается сообщение, но polling прекращается (return false), и пользователю не даётся retry-действие. Это не соответствует issue #37 (ошибка должна иметь действие восстановления) и оставляет прогресс навсегда устаревшим до перезагрузки страницы. Сохраните polling с ограниченным retry/backoff либо добавьте явную кнопку «Повторить».Non-blocking: не реализованы заявленные presets колонок и отдельное loading/stale-состояние; тесты проверяют строки шаблонов, но не рендеринг Jinja, native dialog/focus flow или поведение polling.
compileallпроходит;pytestв окружении недоступен.git diff --checkтакже сообщает CRLF/trailing whitespace в новых CSS/HTML-фрагментах.Итог: blocking issues остаются, PR пока не готов к merge.
Финальный независимый review PR #38: проверены diff feature/admin-ux-hardening относительно main и ключевые файлы. aria-labelledby находится непосредственно на dialog; polling продолжает работу после ошибок и доступна кнопка «Повторить»; presets колонок подключены; версия 0.8.0 и changelog обновлены. Новых блокирующих регрессий не обнаружено — no blocking findings.
fix: harden admin UX and accessibilityto fix: complete admin catalog UX and recoveryПроверен только последний коммит
a989c5c(docs: align version and test instructions).CHANGELOG.mdсинхронизирован с версией 0.8.1.git diff --checkпроходит.По последнему коммиту блокирующих замечаний нет.