Раньше «Всего» в XLSX считало только Q1/Q2/К1 и расходилось с сайтом. Теперь используется результат сервиса сайта: уникальные Q1/Q2/К1/RSCI, у доктора также К2; самостоятельный К2 у кандидата/PhD исключается, пересечения учитываются один раз.
Общий сервис отклоняет явно пустую отрасль (branch=) с 422 для списка, карточки и XLSX до формирования данных. Отсутствие параметра сохраняет техническую отрасль по умолчанию. Регрессии проверяют пустую и непустую БД, выбор специальности и предыдущие параметры.
Первый лист «Подбор диссовета» позволяет выбрать специальность ВАК и допустимую отрасль, искать по ФИО, фильтровать по степени и статусу, сортировать по ФИО и счётчикам. Показаны Q1/Q2/К1/К2/RSCI, общий и подтверждённый счётчики, минимум, статус, подтверждение степени и профиль ВШЭ. После смены специальности несовместимая отрасль автоматически заменяется допустимой; применяемая отрасль показана отдельно. Используются стандартные формулы Excel без макросов и новых зависимостей.
На первом листе также есть памятка по расчёту и использованию, с переходами к ней и обратно к фильтрам. Она поясняет счётчики, правило К2, подтверждения и пороги, ограничения специальностей и источников, различия снимка XLSX и сайта, ручные подтверждения и автоматический пересчёт Excel.
Чтобы фильтры можно было переключать после загрузки, XLSX включает полный набор сотрудников с учёной степенью и их публикаций. Фильтры сайта задают начальный подбор. Имена и столбцы подробных листов сохранены, но они также содержат полный набор. Для обеих доступных отраслей используются результаты существующего сервиса оценки; исходные строки остаются текстом и не выполняются как формулы. Файл хранит снимок на момент выгрузки: ручные подтверждения на сайте требуют новой выгрузки, изменения Excel не отправляются на сайт. Версия приложения/frontend/backend — 1.4.2.
Проверки: полный pytest — 418 passed, 11 skipped; синтаксис четырёх JS-файлов и двух shell-скриптов CI — passed; полный diff против main — без whitespace-ошибок. В установленном Windows Excel 16.0 проверены 14 сценариев и пустая выгрузка на синтетических данных: со��пали результаты и порядок с сервисом сайта, поиск (включая буквальный *), специальности, отрасли, степени, статусы, пороги и счётчики. Добавлены регрессии для К2/RSCI, пересечений оснований, полного набора данных, начальных фильтров, допустимых отраслей и защиты исходного текста.
Ограничения: PostgreSQL-проверки пропущены без отдельной тестовой БД; production не изменялся. Excel проверялся на синтетическом наборе. Требуется независимое ревью в отдельной сессии.
Раньше «Всего» в XLSX считало только Q1/Q2/К1 и расходилось с сайтом. Теперь используется результат сервиса сайта: уникальные Q1/Q2/К1/RSCI, у доктора также К2; самостоятельный К2 у кандидата/PhD исключается, пересечения учитываются один раз.
Общий сервис отклоняет явно пустую отрасль (`branch=`) с 422 для списка, карточки и XLSX до формирования данных. Отсутствие параметра сохраняет техническую отрасль по умолчанию. Регрессии проверяют пустую и непустую БД, выбор специальности и предыдущие параметры.
Первый лист «Подбор диссовета» позволяет выбрать специальность ВАК и допустимую отрасль, искать по ФИО, фильтровать по степени и статусу, сортировать по ФИО и счётчикам. Показаны Q1/Q2/К1/К2/RSCI, общий и подтверждённый счётчики, минимум, статус, подтверждение степени и профиль ВШЭ. После смены специальности несовместимая отрасль автоматически заменяется допустимой; применяемая отрасль показана отдельно. Используются стандартные формулы Excel без макросов и новых зависимостей.
На первом листе также есть памятка по расчёту и использованию, с переходами к ней и обратно к фильтрам. Она поясняет счётчики, правило К2, подтверждения и пороги, ограничения специальностей и источников, различия снимка XLSX и сайта, ручные подтверждения и автоматический пересчёт Excel.
Чтобы фильтры можно было переключать после загрузки, XLSX включает полный набор сотрудников с учёной степенью и их публикаций. Фильтры сайта задают начальный подбор. Имена и столбцы подробных листов сохранены, но они также содержат полный набор. Для обеих доступных отраслей используются результаты существующего сервиса оценки; исходные строки остаются текстом и не выполняются как формулы. Файл хранит снимок на момент выгрузки: ручные подтверждения на сайте требуют новой выгрузки, изменения Excel не отправляются на сайт. Версия приложения/frontend/backend — 1.4.2.
Проверки: полный pytest — 418 passed, 11 skipped; синтаксис четырёх JS-файлов и двух shell-скриптов CI — passed; полный diff против main — без whitespace-ошибок. В установленном Windows Excel 16.0 проверены 14 сценариев и пустая выгрузка на синтетических данных: со��пали результаты и порядок с сервисом сайта, поиск (включая буквальный *), специальности, отрасли, степени, статусы, пороги и счётчики. Добавлены регрессии для К2/RSCI, пересечений оснований, полного набора данных, начальных фильтров, допустимых отраслей и защиты исходного текста.
Ограничения: PostgreSQL-проверки пропущены без отдельной тестовой БД; production не изменялся. Excel проверялся на синтетическом наборе. Требуется независимое ревью в отдельной сессии.
[P2] Экспорт с пустой отраслью теперь завершается необработанным исключением.
Место: app/services/council_export.py:48, связанный вызов app/admin.py:305–312.
Сценарий: GET /admin/council/export.xlsx?branch= (также при пустом наборе сотрудников). council_candidates допускает branch="": проверки на строках 258 и 267 выполняются только при truthy branch, а возвращаемый result["branch"] остаётся пустым. selection_results содержит только «технические» и «физико-математические», поэтому next(... if data["branch"] == result["branch"]) на строке 48 не находит элемент и поднимает StopIteration. Обработчик экспорта его не перехватывает. В base экспорт этого результата не требовал поиска отрасли и мог сформировать файл; теперь этот вход приводит к 500.
Нужно определить поведение пустого параметра до формирования selection_results: например, явно отклонить его как некорректный с 422 либо согласованно нормализовать в допустимую отрасль. Не ограничиваться перехватом StopIteration. Добавить регрессию маршрута для branch= с пустой и непустой БД.
Других замечаний по проверенным изменениям не найдено. Проверены все 10 изменённых файлов и связанные сервисы: полный набор данных для обеих отраслей, использование candidate.total_count, формулы отбора и ранжирования, допустимые отрасли, защита исходных строк от исполнения как формул, памятка, версии и регрессии.
Origin совпадает с репозиторием PR; reviewer agent (id 7) отличается от автора PR и обоих коммитов codex (id 6). CI / test (pull_request) для проверенного SHA — success; git diff --check 7c02b082962e936a — passed. Ошибка установлена трассировкой кода, без запуска приложения. Локальные тесты, PostgreSQL и Excel в сессии reviewer не запускались из-за ограничений роли fetch/read/diff/comment/approval; заявленные автором Excel-сценарии независимо не воспроизводились.
Независимое ревью PR #72, SHA 962e936ad1f735f99baffe2ed9c6794a4a94905f.
[P2] Экспорт с пустой отраслью теперь завершается необработанным исключением.
Место: app/services/council_export.py:48, связанный вызов app/admin.py:305–312.
Сценарий: GET /admin/council/export.xlsx?branch= (также при пустом наборе сотрудников). council_candidates допускает branch="": проверки на строках 258 и 267 выполняются только при truthy branch, а возвращаемый result["branch"] остаётся пустым. selection_results содержит только «технические» и «физико-математические», поэтому next(... if data["branch"] == result["branch"]) на строке 48 не находит элемент и поднимает StopIteration. Обработчик экспорта его не перехватывает. В base экспорт этого результата не требовал поиска отрасли и мог сформировать файл; теперь этот вход приводит к 500.
Нужно определить поведение пустого параметра до формирования selection_results: например, явно отклонить его как некорректный с 422 либо согласованно нормализовать в допустимую отрасль. Не ограничиваться перехватом StopIteration. Добавить регрессию маршрута для branch= с пустой и непустой БД.
Других замечаний по проверенным изменениям не найдено. Проверены все 10 изменённых файлов и связанные сервисы: полный набор данных для обеих отраслей, использование candidate.total_count, формулы отбора и ранжирования, допустимые отрасли, защита исходных строк от исполнения как формул, памятка, версии и регрессии.
Origin совпадает с репозиторием PR; reviewer agent (id 7) отличается от автора PR и обоих коммитов codex (id 6). CI / test (pull_request) для проверенного SHA — success; git diff --check 7c02b082 962e936a — passed. Ошибка установлена трассировкой кода, без запуска приложения. Локальные тесты, PostgreSQL и Excel в сессии reviewer не запускались из-за ограничений роли fetch/read/diff/comment/approval; заявленные автором Excel-сценарии независимо не воспроизводились.
Повторное независимое ревью PR #72 завершено для SHA 1c52b2a2c6. Замечание P2 из ревью 217 устранено, новых замечаний не найдено.
Общий сервис council_candidates теперь отклоняет branch="" через CouncilInputError до чтения данных и формирования результата. Проверены обработчики списка, карточки и XLSX: исключение преобразуется в 422, поэтому прежний путь к StopIteration исключён. Отсутствие параметра сохраняет техническую отрасль по умолчанию; допустимые отрасли и переключение специальности сохраняют прежнее поведение.
Проверены все изменения после SHA 962e936a: регрессия параметризована для пустой и непустой БД, охватывает три маршрута, специальность и previous_specialty, а также успешный экспорт без branch. Версии приложения/frontend/backend и pyproject согласованы на 1.4.2; документация и ожидания тестов обновлены.
Origin повторно совпадает с репозиторием PR. Reviewer agent (id 7) отличается от автора PR и нового коммита codex (id 6). CI / test (pull_request) для текущего SHA — success. git diff --check проходит для полного PR (7c02b082..1c52b2a2) и исправления (962e936a..1c52b2a2).
Локальные тесты, PostgreSQL и Excel reviewer не запускал в рамках ограничений роли fetch/read/diff/comment/approval. Вывод об исправлении основан на проверке кода, регрессий и статуса CI; Excel-сценарии автора независимо не воспроизводились.
Повторное независимое ревью PR #72 завершено для SHA 1c52b2a2c69e286d63e6e8011b82c44b827568b4. Замечание P2 из ревью 217 устранено, новых замечаний не найдено.
Общий сервис council_candidates теперь отклоняет branch="" через CouncilInputError до чтения данных и формирования результата. Проверены обработчики списка, карточки и XLSX: исключение преобразуется в 422, поэтому прежний путь к StopIteration исключён. Отсутствие параметра сохраняет техническую отрасль по умолчанию; допустимые отрасли и переключение специальности сохраняют прежнее поведение.
Проверены все изменения после SHA 962e936a: регрессия параметризована для пустой и непустой БД, охватывает три маршрута, специальность и previous_specialty, а также успешный экспорт без branch. Версии приложения/frontend/backend и pyproject согласованы на 1.4.2; документация и ожидания тестов обновлены.
Origin повторно совпадает с репозиторием PR. Reviewer agent (id 7) отличается от автора PR и нового коммита codex (id 6). CI / test (pull_request) для текущего SHA — success. git diff --check проходит для полного PR (7c02b082..1c52b2a2) и исправления (962e936a..1c52b2a2).
Локальные тесты, PostgreSQL и Excel reviewer не запускал в рамках ограничений роли fetch/read/diff/comment/approval. Вывод об исправлении основан на проверке кода, регрессий и статуса CI; Excel-сценарии автора независимо не воспроизводились.
admin
merged commit ac9b1cebd1 into main2026-10-13 07:48:57 +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.
Раньше «Всего» в XLSX считало только Q1/Q2/К1 и расходилось с сайтом. Теперь используется результат сервиса сайта: уникальные Q1/Q2/К1/RSCI, у доктора также К2; самостоятельный К2 у кандидата/PhD исключается, пересечения учитываются один раз.
Общий сервис отклоняет явно пустую отрасль (
branch=) с 422 для списка, карточки и XLSX до формирования данных. Отсутствие параметра сохраняет техническую отрасль по умолчанию. Регрессии проверяют пустую и непустую БД, выбор специальности и предыдущие параметры.Первый лист «Подбор диссовета» позволяет выбрать специальность ВАК и допустимую отрасль, искать по ФИО, фильтровать по степени и статусу, сортировать по ФИО и счётчикам. Показаны Q1/Q2/К1/К2/RSCI, общий и подтверждённый счётчики, минимум, статус, подтверждение степени и профиль ВШЭ. После смены специальности несовместимая отрасль автоматически заменяется допустимой; применяемая отрасль показана отдельно. Используются стандартные формулы Excel без макросов и новых зависимостей.
На первом листе также есть памятка по расчёту и использованию, с переходами к ней и обратно к фильтрам. Она поясняет счётчики, правило К2, подтверждения и пороги, ограничения специальностей и источников, различия снимка XLSX и сайта, ручные подтверждения и автоматический пересчёт Excel.
Чтобы фильтры можно было переключать после загрузки, XLSX включает полный набор сотрудников с учёной степенью и их публикаций. Фильтры сайта задают начальный подбор. Имена и столбцы подробных листов сохранены, но они также содержат полный набор. Для обеих доступных отраслей используются результаты существующего сервиса оценки; исходные строки остаются текстом и не выполняются как формулы. Файл хранит снимок на момент выгрузки: ручные подтверждения на сайте требуют новой выгрузки, изменения Excel не отправляются на сайт. Версия приложения/frontend/backend — 1.4.2.
Проверки: полный pytest — 418 passed, 11 skipped; синтаксис четырёх JS-файлов и двух shell-скриптов CI — passed; полный diff против main — без whitespace-ошибок. В установленном Windows Excel 16.0 проверены 14 сценариев и пустая выгрузка на синтетических данных: со��пали результаты и порядок с сервисом сайта, поиск (включая буквальный *), специальности, отрасли, степени, статусы, пороги и счётчики. Добавлены регрессии для К2/RSCI, пересечений оснований, полного набора данных, начальных фильтров, допустимых отраслей и защиты исходного текста.
Ограничения: PostgreSQL-проверки пропущены без отдельной тестовой БД; production не изменялся. Excel проверялся на синтетическом наборе. Требуется независимое ревью в отдельной сессии.
Независимое ревью PR #72, SHA
962e936ad1.[P2] Экспорт с пустой отраслью теперь завершается необработанным исключением.
Место: app/services/council_export.py:48, связанный вызов app/admin.py:305–312.
Сценарий: GET /admin/council/export.xlsx?branch= (также при пустом наборе сотрудников). council_candidates допускает branch="": проверки на строках 258 и 267 выполняются только при truthy branch, а возвращаемый result["branch"] остаётся пустым. selection_results содержит только «технические» и «физико-математические», поэтому next(... if data["branch"] == result["branch"]) на строке 48 не находит элемент и поднимает StopIteration. Обработчик экспорта его не перехватывает. В base экспорт этого результата не требовал поиска отрасли и мог сформировать файл; теперь этот вход приводит к 500.
Нужно определить поведение пустого параметра до формирования selection_results: например, явно отклонить его как некорректный с 422 либо согласованно нормализовать в допустимую отрасль. Не ограничиваться перехватом StopIteration. Добавить регрессию маршрута для branch= с пустой и непустой БД.
Других замечаний по проверенным изменениям не найдено. Проверены все 10 изменённых файлов и связанные сервисы: полный набор данных для обеих отраслей, использование candidate.total_count, формулы отбора и ранжирования, допустимые отрасли, защита исходных строк от исполнения как формул, памятка, версии и регрессии.
Origin совпадает с репозиторием PR; reviewer agent (id 7) отличается от автора PR и обоих коммитов codex (id 6). CI / test (pull_request) для проверенного SHA — success; git diff --check
7c02b082962e936a— passed. Ошибка установлена трассировкой кода, без запуска приложения. Локальные тесты, PostgreSQL и Excel в сессии reviewer не запускались из-за ограничений роли fetch/read/diff/comment/approval; заявленные автором Excel-сценарии независимо не воспроизводились.Повторное независимое ревью PR #72 завершено для SHA
1c52b2a2c6. Замечание P2 из ревью 217 устранено, новых замечаний не найдено.Общий сервис council_candidates теперь отклоняет branch="" через CouncilInputError до чтения данных и формирования результата. Проверены обработчики списка, карточки и XLSX: исключение преобразуется в 422, поэтому прежний путь к StopIteration исключён. Отсутствие параметра сохраняет техническую отрасль по умолчанию; допустимые отрасли и переключение специальности сохраняют прежнее поведение.
Проверены все изменения после SHA
962e936a: регрессия параметризована для пустой и непустой БД, охватывает три маршрута, специальность и previous_specialty, а также успешный экспорт без branch. Версии приложения/frontend/backend и pyproject согласованы на 1.4.2; документация и ожидания тестов обновлены.Origin повторно совпадает с репозиторием PR. Reviewer agent (id 7) отличается от автора PR и нового коммита codex (id 6). CI / test (pull_request) для текущего SHA — success. git diff --check проходит для полного PR (7c02b082..1c52b2a2) и исправления (962e936a..1c52b2a2).
Локальные тесты, PostgreSQL и Excel reviewer не запускал в рамках ограничений роли fetch/read/diff/comment/approval. Вывод об исправлении основан на проверке кода, регрессий и статуса CI; Excel-сценарии автора независимо не воспроизводились.