Реализованы UI/UX исправления поиска, лаборатории и служебных экранов по пунктам UI-01—UI-33. Добавлены отдельный защищённый маршрут /users, безопасная очистка ссылок документа, адаптивные состояния и диалоги; обновлены план, DESIGN.md и CHANGELOG.md.
Ограничения: production destructive/auth сценарии, отправка реальной оценки, физический touch, полный ручной KY linguistic review и 200–400% zoom не выполнялись. PR не следует автоматически сливать.
Реализованы UI/UX исправления поиска, лаборатории и служебных экранов по пунктам UI-01—UI-33. Добавлены отдельный защищённый маршрут /users, безопасная очистка ссылок документа, адаптивные состояния и диалоги; обновлены план, DESIGN.md и CHANGELOG.md.
Проверки: backend 59 тестов (1 skipped), Telegram 6, backup 16, deploy 48, host guard, frontend JS syntax и Playwright visual review (320, 390, 1024, 1280, 1440 CSS px).
Ограничения: production destructive/auth сценарии, отправка реальной оценки, физический touch, полный ручной KY linguistic review и 200–400% zoom не выполнялись. PR не следует автоматически сливать.
Ревью полного diff base 25c62d3fff → head 1d5eda3d89. CI tests-and-images и runner-smoke: success. Локальный изолированный fixture-прогон выполнен без production-сети.
[P1, UI-15] backend/search/review.html:588–617: санитаризация проверяет href и src, но оставляет img srcset и a ping. В fixture sanitizeDocumentHtml() сохранил srcset="https://evil.invalid/pixel" и ping="https://evil.invalid/ping" у разрешённой официальной ссылки. Эти атрибуты могут инициировать внешние запросы вопреки запрету небезопасных ссылок из юридического HTML. Минимальное исправление: удалить/валидировать все URL-атрибуты, способные загружать ресурс или отправлять ping, сохраняя текст документа; добавить один целевой fixture-кейс.
[P1, лаборатория] backend/search/review.html:1177–1183: при выборе другого результата openDocument() не очищает прежние document-body/document-meta; при ошибке запроса меняется только status. Fixture: документ 1 загружен, документ 2 возвращает 503 — выбран документ 2, но на экране остаются текст и официальная ссылка документа 1. Это позволяет оценить новый результат по чужому тексту. Минимальное исправление: при начале загрузки/ошибке убрать или явно отделить прежний текст и ссылку, затем проверить смену результата с 503.
[P1, UI-08/10, reflow] backend/search/review.html:86,245,434,471–480: на 640 CSS px /review и /users имеют scrollWidth=763 из-за review__nav-account; на / кнопка кабинета выходит до x=662 и обрезается. Это реальный промежуточный размер, возможный при zoom: основные действия недоступны без горизонтального смещения. Минимальное исправление: раньше перестроить/сократить навигацию и кнопку кабинета, проверить 640 CSS px вместе с 320/390/1024/1280/1440. Тест viewport не заменяет проверки настоящего zoom; 200–400% пока не объявлять пройденными.
Для финальной приёмки остаётся безопасно проверить изменённые формы аккаунта/пользователей и сохранение оценки на fixture либо тестовом окружении, без действий над реальными учётками. Это запрос на целевую проверку существующего сценария, без расширения архитектуры или CI. Merge/deploy не выполнялись.
Ревью полного diff base 25c62d3fffaccf4d01b0c31d58a8a1ac27551526 → head 1d5eda3d8943f2d5dc17354a72ba347bd8b23d80. CI tests-and-images и runner-smoke: success. Локальный изолированный fixture-прогон выполнен без production-сети.
1. [P1, UI-15] `backend/search/review.html:588–617`: санитаризация проверяет `href` и `src`, но оставляет `img srcset` и `a ping`. В fixture `sanitizeDocumentHtml()` сохранил `srcset="https://evil.invalid/pixel"` и `ping="https://evil.invalid/ping"` у разрешённой официальной ссылки. Эти атрибуты могут инициировать внешние запросы вопреки запрету небезопасных ссылок из юридического HTML. Минимальное исправление: удалить/валидировать все URL-атрибуты, способные загружать ресурс или отправлять ping, сохраняя текст документа; добавить один целевой fixture-кейс.
2. [P1, лаборатория] `backend/search/review.html:1177–1183`: при выборе другого результата `openDocument()` не очищает прежние `document-body`/`document-meta`; при ошибке запроса меняется только status. Fixture: документ 1 загружен, документ 2 возвращает 503 — выбран документ 2, но на экране остаются текст и официальная ссылка документа 1. Это позволяет оценить новый результат по чужому тексту. Минимальное исправление: при начале загрузки/ошибке убрать или явно отделить прежний текст и ссылку, затем проверить смену результата с 503.
3. [P1, UI-08/10, reflow] `backend/search/review.html:86,245,434,471–480`: на 640 CSS px `/review` и `/users` имеют `scrollWidth=763` из-за `review__nav-account`; на `/` кнопка кабинета выходит до x=662 и обрезается. Это реальный промежуточный размер, возможный при zoom: основные действия недоступны без горизонтального смещения. Минимальное исправление: раньше перестроить/сократить навигацию и кнопку кабинета, проверить 640 CSS px вместе с 320/390/1024/1280/1440. Тест viewport не заменяет проверки настоящего zoom; 200–400% пока не объявлять пройденными.
Для финальной приёмки остаётся безопасно проверить изменённые формы аккаунта/пользователей и сохранение оценки на fixture либо тестовом окружении, без действий над реальными учётками. Это запрос на целевую проверку существующего сценария, без расширения архитектуры или CI. Merge/deploy не выполнялись.
Повторно проверен полный PR diff base 25c62d3fff → head 224646e9d7. Прежние три замечания review #297 исправлены и независимо воспроизведены как проходящие: srcset/ping удаляются, при ошибке B прежний документ A очищается, на 640 CSS px основные действия доступны. Оба CI-check — success; расширенный локальный fixture-прогон — success, без production-сети.
[P1, UI-10] backend/search/review.html:470–480: трёхколоночная сетка включается сразу после 1100 px, но её минимумы составляют 256 + 360 + 560 = 1176 px. Независимый fixture-прогон показал для /scrollWidth=1176 при viewport 1101 и 1175 CSS px; панель документа выходит за правый край. При 1176 px переполнение исчезает. Это нарушает критерий плана «не сжимать/не обрезать три колонки при нехватке места» и делает часть юридического текста/управления недоступной на промежуточной ширине. Минимальное исправление: оставить двухпанельный режим до ширины, на которой действительно помещаются минимумы, затем проверить 1100/1101/1175/1176 и целевые 1024/1280. Не требуется новая архитектура или широкий тестовый контур.
Реальный browser zoom 200–400% и экспертная лингвистическая проверка всех KY строк не объявляются пройденными; результаты CSS viewport/reflow их не заменяют. Формы аккаунтов тестировались только с перехваченными fixture-запросами; реальные пользователи не затрагивались. Merge/deploy не выполнялись.
Повторно проверен полный PR diff base 25c62d3fffaccf4d01b0c31d58a8a1ac27551526 → head 224646e9d79d2f7547af05708e45bd723a946609. Прежние три замечания review #297 исправлены и независимо воспроизведены как проходящие: `srcset`/`ping` удаляются, при ошибке B прежний документ A очищается, на 640 CSS px основные действия доступны. Оба CI-check — success; расширенный локальный fixture-прогон — success, без production-сети.
[P1, UI-10] `backend/search/review.html:470–480`: трёхколоночная сетка включается сразу после 1100 px, но её минимумы составляют 256 + 360 + 560 = 1176 px. Независимый fixture-прогон показал для `/` `scrollWidth=1176` при viewport 1101 и 1175 CSS px; панель документа выходит за правый край. При 1176 px переполнение исчезает. Это нарушает критерий плана «не сжимать/не обрезать три колонки при нехватке места» и делает часть юридического текста/управления недоступной на промежуточной ширине. Минимальное исправление: оставить двухпанельный режим до ширины, на которой действительно помещаются минимумы, затем проверить 1100/1101/1175/1176 и целевые 1024/1280. Не требуется новая архитектура или широкий тестовый контур.
Реальный browser zoom 200–400% и экспертная лингвистическая проверка всех KY строк не объявляются пройденными; результаты CSS viewport/reflow их не заменяют. Формы аккаунтов тестировались только с перехваченными fixture-запросами; реальные пользователи не затрагивались. Merge/deploy не выполнялись.
Проверен полный diff PR #54: base 25c62d3fff → head 6a3a6f8da5, единый план UI-01—UI-33, DESIGN.md, versions/changelog и fixture. Все четыре прежних замечания reviews #297/#298 устранены. Независимый локальный fixture без production-сети: srcset/ping и небезопасные URL удалены; при A → ошибка B старый документ/source очищается, успешная B и запоздалый A не подменяют выбор, рейтинг и черновик сохранены; reflow без page overflow на проверенных ширинах. На 1101/1175 CSS px сетка двухпанельная, на 1176 — трёхпанельная; со скрытыми фильтрами при resize остаются две панели. Расширенный fixture прошёл, включая фиктивные password/create/reset/delete/save. CI tests-and-images и runner-smoke на текущем SHA — success. Новых блокирующих замечаний нет.
Ограничения: настоящий browser zoom 200–400% и экспертная проверка всех KY формулировок не подтверждены; CSS viewport/reflow не выдаётся за zoom. Fixture операции не обращались к реальным пользователям и production. Это initial review, без merge/deploy.
Проверен полный diff PR #54: base 25c62d3fffaccf4d01b0c31d58a8a1ac27551526 → head 6a3a6f8da50083ea5cd83aadb634e0777f733797, единый план UI-01—UI-33, DESIGN.md, versions/changelog и fixture. Все четыре прежних замечания reviews #297/#298 устранены. Независимый локальный fixture без production-сети: `srcset`/`ping` и небезопасные URL удалены; при A → ошибка B старый документ/source очищается, успешная B и запоздалый A не подменяют выбор, рейтинг и черновик сохранены; reflow без page overflow на проверенных ширинах. На 1101/1175 CSS px сетка двухпанельная, на 1176 — трёхпанельная; со скрытыми фильтрами при resize остаются две панели. Расширенный fixture прошёл, включая фиктивные password/create/reset/delete/save. CI tests-and-images и runner-smoke на текущем SHA — success. Новых блокирующих замечаний нет.
Ограничения: настоящий browser zoom 200–400% и экспертная проверка всех KY формулировок не подтверждены; CSS viewport/reflow не выдаётся за zoom. Fixture операции не обращались к реальным пользователям и production. Это initial review, без merge/deploy.
Финальная техническая проверка PR #54 на head 6a3a6f8da50083ea5cd83aadb634e0777f733797 (base 25c62d3fffaccf4d01b0c31d58a8a1ac27551526). Формальное ревью #299 — APPROVED на этом SHA; блокирующих замечаний по коду не осталось.
Проверены полный diff, план UI-01—UI-33 и CHANGELOG; версии Frontend 0.2.6 / Backend 0.13.1 согласованы. Исправления предыдущих ревью подтверждены: очистка srcset/ping, сброс устаревшего текста документа при ошибке загрузки, отсутствие переполнения на 640 px и корректная двухпанельная компоновка до 1175 px. Независимый Playwright fixture завершился без failedCoreChecks; он проверил reflow, безопасные ссылки, переключение документов с ошибкой и гонкой ответов, а также формы на фиктивных пользователях. На текущем SHA оба CI check — success.
Для полной визуальной приёмки остаются ручные проверки реального browser zoom 200–400%, физического touch и экспертная проверка кыргызских подписей. Проверка CSS viewport/reflow не заменяет browser zoom. Операции с настоящими пользователями и паролями не выполнялись. Защиту ветки через API подтвердить не удалось (HTTP 403). Merge и deployment не выполнялись.
Финальная техническая проверка PR #54 на head `6a3a6f8da50083ea5cd83aadb634e0777f733797` (base `25c62d3fffaccf4d01b0c31d58a8a1ac27551526`). Формальное ревью #299 — APPROVED на этом SHA; блокирующих замечаний по коду не осталось.
Проверены полный diff, план UI-01—UI-33 и CHANGELOG; версии Frontend 0.2.6 / Backend 0.13.1 согласованы. Исправления предыдущих ревью подтверждены: очистка `srcset`/`ping`, сброс устаревшего текста документа при ошибке загрузки, отсутствие переполнения на 640 px и корректная двухпанельная компоновка до 1175 px. Независимый Playwright fixture завершился без failedCoreChecks; он проверил reflow, безопасные ссылки, переключение документов с ошибкой и гонкой ответов, а также формы на фиктивных пользователях. На текущем SHA оба CI check — success.
Для полной визуальной приёмки остаются ручные проверки реального browser zoom 200–400%, физического touch и экспертная проверка кыргызских подписей. Проверка CSS viewport/reflow не заменяет browser zoom. Операции с настоящими пользователями и паролями не выполнялись. Защиту ветки через API подтвердить не удалось (HTTP 403). Merge и deployment не выполнялись.
admin
merged commit 01380d3c09 into main2026-10-23 19:44:50 +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.
Реализованы UI/UX исправления поиска, лаборатории и служебных экранов по пунктам UI-01—UI-33. Добавлены отдельный защищённый маршрут /users, безопасная очистка ссылок документа, адаптивные состояния и диалоги; обновлены план, DESIGN.md и CHANGELOG.md.
Проверки: backend 59 тестов (1 skipped), Telegram 6, backup 16, deploy 48, host guard, frontend JS syntax и Playwright visual review (320, 390, 1024, 1280, 1440 CSS px).
Ограничения: production destructive/auth сценарии, отправка реальной оценки, физический touch, полный ручной KY linguistic review и 200–400% zoom не выполнялись. PR не следует автоматически сливать.
Ревью полного diff base
25c62d3fff→ head1d5eda3d89. CI tests-and-images и runner-smoke: success. Локальный изолированный fixture-прогон выполнен без production-сети.[P1, UI-15]
backend/search/review.html:588–617: санитаризация проверяетhrefиsrc, но оставляетimg srcsetиa ping. В fixturesanitizeDocumentHtml()сохранилsrcset="https://evil.invalid/pixel"иping="https://evil.invalid/ping"у разрешённой официальной ссылки. Эти атрибуты могут инициировать внешние запросы вопреки запрету небезопасных ссылок из юридического HTML. Минимальное исправление: удалить/валидировать все URL-атрибуты, способные загружать ресурс или отправлять ping, сохраняя текст документа; добавить один целевой fixture-кейс.[P1, лаборатория]
backend/search/review.html:1177–1183: при выборе другого результатаopenDocument()не очищает прежниеdocument-body/document-meta; при ошибке запроса меняется только status. Fixture: документ 1 загружен, документ 2 возвращает 503 — выбран документ 2, но на экране остаются текст и официальная ссылка документа 1. Это позволяет оценить новый результат по чужому тексту. Минимальное исправление: при начале загрузки/ошибке убрать или явно отделить прежний текст и ссылку, затем проверить смену результата с 503.[P1, UI-08/10, reflow]
backend/search/review.html:86,245,434,471–480: на 640 CSS px/reviewи/usersимеютscrollWidth=763из-заreview__nav-account; на/кнопка кабинета выходит до x=662 и обрезается. Это реальный промежуточный размер, возможный при zoom: основные действия недоступны без горизонтального смещения. Минимальное исправление: раньше перестроить/сократить навигацию и кнопку кабинета, проверить 640 CSS px вместе с 320/390/1024/1280/1440. Тест viewport не заменяет проверки настоящего zoom; 200–400% пока не объявлять пройденными.Для финальной приёмки остаётся безопасно проверить изменённые формы аккаунта/пользователей и сохранение оценки на fixture либо тестовом окружении, без действий над реальными учётками. Это запрос на целевую проверку существующего сценария, без расширения архитектуры или CI. Merge/deploy не выполнялись.
Повторно проверен полный PR diff base
25c62d3fff→ head224646e9d7. Прежние три замечания review #297 исправлены и независимо воспроизведены как проходящие:srcset/pingудаляются, при ошибке B прежний документ A очищается, на 640 CSS px основные действия доступны. Оба CI-check — success; расширенный локальный fixture-прогон — success, без production-сети.[P1, UI-10]
backend/search/review.html:470–480: трёхколоночная сетка включается сразу после 1100 px, но её минимумы составляют 256 + 360 + 560 = 1176 px. Независимый fixture-прогон показал для/scrollWidth=1176при viewport 1101 и 1175 CSS px; панель документа выходит за правый край. При 1176 px переполнение исчезает. Это нарушает критерий плана «не сжимать/не обрезать три колонки при нехватке места» и делает часть юридического текста/управления недоступной на промежуточной ширине. Минимальное исправление: оставить двухпанельный режим до ширины, на которой действительно помещаются минимумы, затем проверить 1100/1101/1175/1176 и целевые 1024/1280. Не требуется новая архитектура или широкий тестовый контур.Реальный browser zoom 200–400% и экспертная лингвистическая проверка всех KY строк не объявляются пройденными; результаты CSS viewport/reflow их не заменяют. Формы аккаунтов тестировались только с перехваченными fixture-запросами; реальные пользователи не затрагивались. Merge/deploy не выполнялись.
Проверен полный diff PR #54: base
25c62d3fff→ head6a3a6f8da5, единый план UI-01—UI-33, DESIGN.md, versions/changelog и fixture. Все четыре прежних замечания reviews #297/#298 устранены. Независимый локальный fixture без production-сети:srcset/pingи небезопасные URL удалены; при A → ошибка B старый документ/source очищается, успешная B и запоздалый A не подменяют выбор, рейтинг и черновик сохранены; reflow без page overflow на проверенных ширинах. На 1101/1175 CSS px сетка двухпанельная, на 1176 — трёхпанельная; со скрытыми фильтрами при resize остаются две панели. Расширенный fixture прошёл, включая фиктивные password/create/reset/delete/save. CI tests-and-images и runner-smoke на текущем SHA — success. Новых блокирующих замечаний нет.Ограничения: настоящий browser zoom 200–400% и экспертная проверка всех KY формулировок не подтверждены; CSS viewport/reflow не выдаётся за zoom. Fixture операции не обращались к реальным пользователям и production. Это initial review, без merge/deploy.
Финальная техническая проверка PR #54 на head
6a3a6f8da50083ea5cd83aadb634e0777f733797(base25c62d3fffaccf4d01b0c31d58a8a1ac27551526). Формальное ревью #299 — APPROVED на этом SHA; блокирующих замечаний по коду не осталось.Проверены полный diff, план UI-01—UI-33 и CHANGELOG; версии Frontend 0.2.6 / Backend 0.13.1 согласованы. Исправления предыдущих ревью подтверждены: очистка
srcset/ping, сброс устаревшего текста документа при ошибке загрузки, отсутствие переполнения на 640 px и корректная двухпанельная компоновка до 1175 px. Независимый Playwright fixture завершился без failedCoreChecks; он проверил reflow, безопасные ссылки, переключение документов с ошибкой и гонкой ответов, а также формы на фиктивных пользователях. На текущем SHA оба CI check — success.Для полной визуальной приёмки остаются ручные проверки реального browser zoom 200–400%, физического touch и экспертная проверка кыргызских подписей. Проверка CSS viewport/reflow не заменяет browser zoom. Операции с настоящими пользователями и паролями не выполнялись. Защиту ветки через API подтвердить не удалось (HTTP 403). Merge и deployment не выполнялись.