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.
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).
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.
Независимый полный 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.
Финальный полный 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.
Финальный независимый 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.
Проверен 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 main2026-09-16 06:11:49 +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.
Что изменено
/review;Проверки
python3 -m unittest discover -s backend -v— 28 tests passed, 1 skipped;/reviewwith HTTP 200 and is healthy.PR #33 review: BLOCK —
backend/search/review.html:72,74,162: tutorial usesdialog.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: MEDIUMreview.html:54-57hidden 1px radios have no visible keyboard focus; MEDIUMreview.html:20,88-91mobile fixed save bar can cover the last rating; MEDIUMreview.html:161,168unguarded localStorage can prevent tutorial close/auto-open when storage is blocked; LOW stale Backend 0.9.1 inREADME.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).Повторный полный review PR #33 после
503cb1f.Blocking finding:
backend/search/review.html:86-87,127-130,164: на ширине <=800px.review__document(targetdocument-panel) имеетdisplay: none, но шаг 3 tutorial всё равно измеряет и подсвечивает этот элемент. У скрытого элементаgetBoundingClientRect()даёт нулевой размер, поэтому spotlight оказывается пустым прямоугольником у верхнего края; при этом реальный mobile-сценарий открывает документ вdocument-dialogтолько после выбора результата. На мобильном ключевая подсказка фактически не указывает, куда нажать. Нужен отдельный mobile target/текст или адаптация шага под dialog после поиска.Проверка прежних findings:
Checks:
git diff --check: clean;Итог: 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.Финальный полный read-only review PR #33 после
90298fa(head90298fa6cce6ffb4b9b889548f1fec854eb91f46, basemain).Итог: 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.Финальный независимый 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.
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.