feat: polish search review interface #33

Merged
admin merged 4 commits from feature/polish-review-interface into main 2026-09-16 06:11:49 +00:00
Owner

Что изменено

  • обновлена визуальная иерархия внутренней лаборатории /review;
  • добавлен первый запуск с 4 шагами подсказок;
  • tutorial можно пропустить и повторно открыть через «Как это работает»;
  • добавлен empty state и выделение выбранного документа;
  • backend version bumped to 0.9.2.

Проверки

  • python3 -m unittest discover -s backend -v — 28 tests passed, 1 skipped;
  • Node syntax check for embedded review script;
  • local Docker Search API returns /review with HTTP 200 and is healthy.
## Что изменено - обновлена визуальная иерархия внутренней лаборатории `/review`; - добавлен первый запуск с 4 шагами подсказок; - tutorial можно пропустить и повторно открыть через «Как это работает»; - добавлен empty state и выделение выбранного документа; - backend version bumped to 0.9.2. ## Проверки - `python3 -m unittest discover -s backend -v` — 28 tests passed, 1 skipped; - Node syntax check for embedded review script; - local Docker Search API returns `/review` with HTTP 200 and is healthy.
agent added 1 commit 2026-09-15 21:14:31 +00:00
Author
Owner

PR #33 review: BLOCK — backend/search/review.html:72,74,162: tutorial uses dialog.showModal() while its highlighted targets remain in the ordinary DOM; the modal backdrop covers them, so the promised visual spotlight is not reliable. Other findings: MEDIUM review.html:54-57 hidden 1px radios have no visible keyboard focus; MEDIUM review.html:20,88-91 mobile fixed save bar can cover the last rating; MEDIUM review.html:161,168 unguarded localStorage can prevent tutorial close/auto-open when storage is blocked; LOW stale Backend 0.9.1 in README.md:62, backend/README.md:3,243, docs/README.md:42. Checks: backend unittest 28 passed, 1 skipped; diff check clean. Browser/AT verification not run (no browser runtime).

PR #33 review: BLOCK — `backend/search/review.html:72,74,162`: tutorial uses `dialog.showModal()` while its highlighted targets remain in the ordinary DOM; the modal backdrop covers them, so the promised visual spotlight is not reliable. Other findings: MEDIUM `review.html:54-57` hidden 1px radios have no visible keyboard focus; MEDIUM `review.html:20,88-91` mobile fixed save bar can cover the last rating; MEDIUM `review.html:161,168` unguarded localStorage can prevent tutorial close/auto-open when storage is blocked; LOW stale Backend 0.9.1 in `README.md:62`, `backend/README.md:3,243`, `docs/README.md:42`. Checks: backend unittest 28 passed, 1 skipped; diff check clean. Browser/AT verification not run (no browser runtime).
agent added 1 commit 2026-09-15 21:20:57 +00:00
Author
Owner

Повторный полный review PR #33 после 503cb1f.

Blocking finding:

  • HIGH — backend/search/review.html:86-87,127-130,164: на ширине <=800px .review__document (target document-panel) имеет display: none, но шаг 3 tutorial всё равно измеряет и подсвечивает этот элемент. У скрытого элемента getBoundingClientRect() даёт нулевой размер, поэтому spotlight оказывается пустым прямоугольником у верхнего края; при этом реальный mobile-сценарий открывает документ в document-dialog только после выбора результата. На мобильном ключевая подсказка фактически не указывает, куда нажать. Нужен отдельный mobile target/текст или адаптация шага под dialog после поиска.

Проверка прежних findings:

  • desktop spotlight теперь вынесен в overlay с прозрачным dialog backdrop — исправлено;
  • keyboard focus для radio labels добавлен — исправлено;
  • mobile bottom padding увеличен до 14rem — исправлено;
  • доступ к localStorage обёрнут — исправлено;
  • актуальные версии README/footer синхронизированы — исправлено.

Checks:

  • backend unittest: 28 passed, 1 skipped;
  • git diff --check: clean;
  • browser/AT визуальная проверка: Not verified, browser runtime недоступен.

Итог: BLOCK до исправления mobile tutorial step 3.

Повторный полный review PR #33 после 503cb1f. Blocking finding: - HIGH — `backend/search/review.html:86-87,127-130,164`: на ширине <=800px `.review__document` (target `document-panel`) имеет `display: none`, но шаг 3 tutorial всё равно измеряет и подсвечивает этот элемент. У скрытого элемента `getBoundingClientRect()` даёт нулевой размер, поэтому spotlight оказывается пустым прямоугольником у верхнего края; при этом реальный mobile-сценарий открывает документ в `document-dialog` только после выбора результата. На мобильном ключевая подсказка фактически не указывает, куда нажать. Нужен отдельный mobile target/текст или адаптация шага под dialog после поиска. Проверка прежних findings: - desktop spotlight теперь вынесен в overlay с прозрачным dialog backdrop — исправлено; - keyboard focus для radio labels добавлен — исправлено; - mobile bottom padding увеличен до 14rem — исправлено; - доступ к localStorage обёрнут — исправлено; - актуальные версии README/footer синхронизированы — исправлено. Checks: - backend unittest: 28 passed, 1 skipped; - `git diff --check`: clean; - browser/AT визуальная проверка: Not verified, browser runtime недоступен. Итог: BLOCK до исправления mobile tutorial step 3.
Author
Owner

Независимый полный review PR #33 на head 503cb1f (base main).

BLOCKING FINDING — HIGH: backend/search/review.html:86-87,127-130,164. На ширине <=800px .review__document / #document-panel скрыт через display:none, но шаг 3 tutorial всё равно вызывает getBoundingClientRect() для этого target и строит spotlight. Размер скрытого элемента нулевой, поэтому на мобильном ключевая подсказка не указывает, куда нажать; фактический документ открывается в другом #document-dialog после выбора результата. Нужен мобильный target/текст либо адаптация шага к mobile-сценарию.

Проверено заново: backend unittest — 28 passed, 1 skipped; embedded JS syntax — OK; git diff --check — clean. Accessibility/UI: focus у radio предусмотрен, localStorage и версии синхронизированы; браузерная/AT-проверка недоступна. Тесты проверяют только наличие tutorial-разметки и не ловят responsive-регрессию. Итог: BLOCK — до исправления mobile tutorial step 3.

Независимый полный review PR #33 на head 503cb1f (base main). BLOCKING FINDING — HIGH: `backend/search/review.html:86-87,127-130,164`. На ширине `<=800px` `.review__document` / `#document-panel` скрыт через `display:none`, но шаг 3 tutorial всё равно вызывает `getBoundingClientRect()` для этого target и строит spotlight. Размер скрытого элемента нулевой, поэтому на мобильном ключевая подсказка не указывает, куда нажать; фактический документ открывается в другом `#document-dialog` после выбора результата. Нужен мобильный target/текст либо адаптация шага к mobile-сценарию. Проверено заново: backend unittest — 28 passed, 1 skipped; embedded JS syntax — OK; `git diff --check` — clean. Accessibility/UI: focus у radio предусмотрен, localStorage и версии синхронизированы; браузерная/AT-проверка недоступна. Тесты проверяют только наличие tutorial-разметки и не ловят responsive-регрессию. Итог: BLOCK — до исправления mobile tutorial step 3.
agent added 1 commit 2026-09-15 21:27:00 +00:00
Author
Owner

Финальный полный read-only review PR #33 после 90298fa (head 90298fa6cce6ffb4b9b889548f1fec854eb91f46, base main).

Итог: APPROVE — blocking findings отсутствуют.

Проверка предыдущего mobile HIGH: исправлено. На ширине <=800px шаг 3 tutorial временно добавляет review__document--tour-visible, поэтому #document-panel больше не измеряется как скрытый элемент; при закрытии tutorial класс удаляется. Desktop spotlight и прежние исправления focus/localStorage/mobile save-bar/версий сохранены.

Проверено: полный diff main...90298fa; backend unittest — 28 passed, 1 skipped (OpenSearch integration без AKYLDASH_OPENSEARCH_URL); embedded JS syntax — OK; git diff --check — clean. Проверены корректность, регрессии, UI polish, keyboard/a11y markup, security-sensitive DOM paths, тесты и версии. Browser visual/AT прогон не выполнен: browser runtime недоступен; тесты tutorial остаются статическими и не проверяют responsive DOM-поведение. Это ограничение проверки, но не blocking finding.

Финальный полный read-only review PR #33 после `90298fa` (head `90298fa6cce6ffb4b9b889548f1fec854eb91f46`, base `main`). Итог: APPROVE — blocking findings отсутствуют. Проверка предыдущего mobile HIGH: исправлено. На ширине `<=800px` шаг 3 tutorial временно добавляет `review__document--tour-visible`, поэтому `#document-panel` больше не измеряется как скрытый элемент; при закрытии tutorial класс удаляется. Desktop spotlight и прежние исправления focus/localStorage/mobile save-bar/версий сохранены. Проверено: полный diff `main...90298fa`; backend unittest — 28 passed, 1 skipped (OpenSearch integration без `AKYLDASH_OPENSEARCH_URL`); embedded JS syntax — OK; `git diff --check` — clean. Проверены корректность, регрессии, UI polish, keyboard/a11y markup, security-sensitive DOM paths, тесты и версии. Browser visual/AT прогон не выполнен: browser runtime недоступен; тесты tutorial остаются статическими и не проверяют responsive DOM-поведение. Это ограничение проверки, но не blocking finding.
Author
Owner

Финальный независимый review строго текущего head 90298fa6cce6ffb4b9b889548f1fec854eb91f46 (старые комментарии не учитывал).

Mobile tutorial step 3: .review__document--tour-visible { display: block; } действительно делает скрытый #document-panel видимым на mobile, поэтому прежний блокер устранён. После открытия tutorial backdrop у него прозрачный, spotlight остаётся видимым. На mobile фактическое открытие документа идёт в document-dialog, что соответствует текущему responsive flow.

Проверил весь diff на regressions: blocking-проблем не обнаружено. 28 passed, 1 skipped; embedded JS syntax OK; git diff --check чистый.

Итог: no blocking findings.

Финальный независимый review строго текущего head `90298fa6cce6ffb4b9b889548f1fec854eb91f46` (старые комментарии не учитывал). Mobile tutorial step 3: `.review__document--tour-visible { display: block; }` действительно делает скрытый `#document-panel` видимым на mobile, поэтому прежний блокер устранён. После открытия tutorial backdrop у него прозрачный, spotlight остаётся видимым. На mobile фактическое открытие документа идёт в `document-dialog`, что соответствует текущему responsive flow. Проверил весь diff на regressions: blocking-проблем не обнаружено. `28 passed, 1 skipped`; embedded JS syntax OK; `git diff --check` чистый. Итог: no blocking findings.
agent added 1 commit 2026-09-16 03:54:48 +00:00
Author
Owner

APPROVE

Проверен head 6a18776 (base main). /search реально отвечает 200 OK на локальном индексе akyldash-fragments-v2 и возвращает результаты; пустой q корректно даёт 400. Ошибка поиска теперь использует единый #status с role=status/alert и aria-live=polite/assertive. Actions идут перед footer в DOM, label/input имеют gap и отступы, mobile layout проверен по CSS. UI diff просмотрен: native dialog, focus-visible, keyboard labels, reduced-motion, localStorage try/catch, контент документов проходит sanitizer до innerHTML. Тесты: 28 passed, 1 skipped; JS syntax OK; git diff --check чистый. Browser/AT audit не выполнен: browser runtime недоступен. Blocking findings: none.

APPROVE Проверен head 6a18776 (base main). /search реально отвечает 200 OK на локальном индексе akyldash-fragments-v2 и возвращает результаты; пустой q корректно даёт 400. Ошибка поиска теперь использует единый #status с role=status/alert и aria-live=polite/assertive. Actions идут перед footer в DOM, label/input имеют gap и отступы, mobile layout проверен по CSS. UI diff просмотрен: native dialog, focus-visible, keyboard labels, reduced-motion, localStorage try/catch, контент документов проходит sanitizer до innerHTML. Тесты: 28 passed, 1 skipped; JS syntax OK; git diff --check чистый. Browser/AT audit не выполнен: browser runtime недоступен. Blocking findings: none.
admin merged commit f045233a50 into main 2026-09-16 06:11:49 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: agent/akyldash#33