Реализован фильтр Search API v1 по юридической силе с группировкой типов НПА и подготовлен отдельный черновик полной тематической иерархии GeneralClassifiers. Тематический фильтр в API v1 не добавлялся по решению продукта.
Черновик содержит 2 065 исходных узлов; 328 корневых рубрик отложены для ручной проверки (77 неоднозначны, для 251 правило не найдено), у 1 524 узлов отсутствует KY-подпись в источнике. До ручного утверждения темы не являются публичными кодами API. Пересборка завершается ошибкой при отсутствующих, повреждённых или структурно неполных данных источника.
Проверки: PYTHONPATH=backend python3 -m unittest discover -s backend -v — 26 пройдены, один OpenSearch integration test пропущен (итого 27), так как AKYLDASH_OPENSEARCH_URL не задан; структура JSON-каталога проверена.
Реализован фильтр Search API v1 по юридической силе с группировкой типов НПА и подготовлен отдельный черновик полной тематической иерархии `GeneralClassifiers`. Тематический фильтр в API v1 не добавлялся по решению продукта.
Черновик содержит 2 065 исходных узлов; 328 корневых рубрик отложены для ручной проверки (77 неоднозначны, для 251 правило не найдено), у 1 524 узлов отсутствует KY-подпись в источнике. До ручного утверждения темы не являются публичными кодами API. Пересборка завершается ошибкой при отсутствующих, повреждённых или структурно неполных данных источника.
Проверки: `PYTHONPATH=backend python3 -m unittest discover -s backend -v` — 26 пройдены, один OpenSearch integration test пропущен (итого 27), так как `AKYLDASH_OPENSEARCH_URL` не задан; структура JSON-каталога проверена.
tools/build_search_topic_taxonomy.py:57–60 и docs/product/search-catalog-v1.md:108–110: group_for выбирает первый regex match, не проверяя остальные. В JSON 77 корневых рубрик совпадают с несколькими правилами; например «Иностранные инвестиции» совпадает с international и economy, но автоматически попадает в первую группу. Поэтому утверждение, что неоднозначные рубрики направляются в review_required, неверно. Нужно явно отправлять multi-match на ручную проверку либо обосновать и проверить приоритеты, затем обновить экспорт и счётчики.
tools/build_search_topic_taxonomy.py:120–126: отсутствующий, нечитаемый или невалидный document.json превращается в пустой список, а processed всё равно увеличивается. Пересборка может молча выпустить неполную таксономию с завышенным числом обработанных документов. Ошибка должна останавливать экспорт либо явно фиксироваться и отражаться в счётчиках.
Проверки прошли: backend suite — 23 теста, 1 OpenSearch integration test пропущен без AKYLDASH_OPENSEARCH_URL; повторный экспорт совпал с закоммиченным JSON по содержимому. Остальные проверенные изменения API/legal-force и версионирование/changelog блокирующих замечаний не вызвали.
Независимый review: есть блокирующие замечания.
1. `tools/build_search_topic_taxonomy.py:57–60` и `docs/product/search-catalog-v1.md:108–110`: `group_for` выбирает первый regex match, не проверяя остальные. В JSON 77 корневых рубрик совпадают с несколькими правилами; например «Иностранные инвестиции» совпадает с `international` и `economy`, но автоматически попадает в первую группу. Поэтому утверждение, что неоднозначные рубрики направляются в `review_required`, неверно. Нужно явно отправлять multi-match на ручную проверку либо обосновать и проверить приоритеты, затем обновить экспорт и счётчики.
2. `tools/build_search_topic_taxonomy.py:120–126`: отсутствующий, нечитаемый или невалидный `document.json` превращается в пустой список, а `processed` всё равно увеличивается. Пересборка может молча выпустить неполную таксономию с завышенным числом обработанных документов. Ошибка должна останавливать экспорт либо явно фиксироваться и отражаться в счётчиках.
Проверки прошли: backend suite — 23 теста, 1 OpenSearch integration test пропущен без `AKYLDASH_OPENSEARCH_URL`; повторный экспорт совпал с закоммиченным JSON по содержимому. Остальные проверенные изменения API/legal-force и версионирование/changelog блокирующих замечаний не вызвали.
Повторный независимый review: оба предыдущих замечания исправлены — неоднозначные regex-совпадения теперь попадают в review_required, а отсутствующий/битый JSON successful-записи останавливает сборку.
Остался блокирующий случай полноты: tools/build_search_topic_taxonomy.py:128 принимает объект без general_classifiers (например {}) как пустую иерархию; неверный тип поля также молча игнорируется в add_nodes. Я проверил: такая successful-запись даёт успешный результат documents=1, nodes=0. Нормализатор всегда записывает general_classifiers как список, поэтому при отсутствии поля или неверном типе сборка должна завершаться ошибкой; добавьте проверку и тест.
Проверки: backend suite — 25 тестов пройдены, один OpenSearch integration test пропущен без AKYLDASH_OPENSEARCH_URL; полный экспорт повторён и семантически совпадает с JSON в PR (209958 документов, 2065 узлов, 687 корней, 328 на ручной проверке). API/legal-force, версия и changelog при повторной проверке без новых блокирующих замечаний.
Повторный независимый review: оба предыдущих замечания исправлены — неоднозначные regex-совпадения теперь попадают в `review_required`, а отсутствующий/битый JSON successful-записи останавливает сборку.
Остался блокирующий случай полноты: `tools/build_search_topic_taxonomy.py:128` принимает объект без `general_classifiers` (например `{}`) как пустую иерархию; неверный тип поля также молча игнорируется в `add_nodes`. Я проверил: такая successful-запись даёт успешный результат `documents=1, nodes=0`. Нормализатор всегда записывает `general_classifiers` как список, поэтому при отсутствии поля или неверном типе сборка должна завершаться ошибкой; добавьте проверку и тест.
Проверки: backend suite — 25 тестов пройдены, один OpenSearch integration test пропущен без `AKYLDASH_OPENSEARCH_URL`; полный экспорт повторён и семантически совпадает с JSON в PR (209958 документов, 2065 узлов, 687 корней, 328 на ручной проверке). API/legal-force, версия и changelog при повторной проверке без новых блокирующих замечаний.
Повторный независимый review текущего PR f8f98df: прежние замечания устранены. Все три проверки подтверждены: неоднозначные правила ведут в review_required; missing/corrupt/non-object normalized JSON и отсутствующий/не-list general_classifiers завершают build ошибкой; неверный тип вложенного GeneralClassifiers и не-object узлы также отклоняются. None для дочерней ветви остаётся допустимым листом, что соответствует нормализатору.
Полный backend suite: 27 тестов пройдены, один OpenSearch integration test пропущен без AKYLDASH_OPENSEARCH_URL; git diff --check чистый. Повторно просмотрел остальной diff: API/legal-force, индексация, версия и changelog без блокирующих замечаний. Review завершён без блокирующих замечаний.
Повторный независимый review текущего PR `f8f98df`: прежние замечания устранены. Все три проверки подтверждены: неоднозначные правила ведут в `review_required`; missing/corrupt/non-object normalized JSON и отсутствующий/не-list `general_classifiers` завершают build ошибкой; неверный тип вложенного `GeneralClassifiers` и не-object узлы также отклоняются. `None` для дочерней ветви остаётся допустимым листом, что соответствует нормализатору.
Полный backend suite: 27 тестов пройдены, один OpenSearch integration test пропущен без `AKYLDASH_OPENSEARCH_URL`; `git diff --check` чистый. Повторно просмотрел остальной diff: API/legal-force, индексация, версия и changelog без блокирующих замечаний. Review завершён без блокирующих замечаний.
Финальный независимый review текущего PR 000cf46: без блокирующих замечаний. Все три прежних findings по классификации и полноте экспорта остаются решёнными: неоднозначные совпадения идут в review_required; missing/corrupt/non-object JSON, отсутствующий или неверного типа general_classifiers, а также повреждённые вложенные ветви/узлы останавливают сборку. Точечные проверки этих сценариев прошли.
Changelog уточнён под итоговый scope: описывает фильтр юридической силы и экспорт полной иерархии как черновика, отдельно фиксируя, что тематическая навигация отложена до ручного утверждения. Backend suite: 27 passed, 1 OpenSearch integration test skipped без AKYLDASH_OPENSEARCH_URL; git diff --check чистый. Review завершён без блокирующих замечаний.
Финальный независимый review текущего PR `000cf46`: без блокирующих замечаний. Все три прежних findings по классификации и полноте экспорта остаются решёнными: неоднозначные совпадения идут в `review_required`; missing/corrupt/non-object JSON, отсутствующий или неверного типа `general_classifiers`, а также повреждённые вложенные ветви/узлы останавливают сборку. Точечные проверки этих сценариев прошли.
Changelog уточнён под итоговый scope: описывает фильтр юридической силы и экспорт полной иерархии как черновика, отдельно фиксируя, что тематическая навигация отложена до ручного утверждения. Backend suite: 27 passed, 1 OpenSearch integration test skipped без `AKYLDASH_OPENSEARCH_URL`; `git diff --check` чистый. Review завершён без блокирующих замечаний.
admin
merged commit bb5edf3ae2 into main2026-09-14 07:56:15 +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.
Реализован фильтр Search API v1 по юридической силе с группировкой типов НПА и подготовлен отдельный черновик полной тематической иерархии
GeneralClassifiers. Тематический фильтр в API v1 не добавлялся по решению продукта.Черновик содержит 2 065 исходных узлов; 328 корневых рубрик отложены для ручной проверки (77 неоднозначны, для 251 правило не найдено), у 1 524 узлов отсутствует KY-подпись в источнике. До ручного утверждения темы не являются публичными кодами API. Пересборка завершается ошибкой при отсутствующих, повреждённых или структурно неполных данных источника.
Проверки:
PYTHONPATH=backend python3 -m unittest discover -s backend -v— 26 пройдены, один OpenSearch integration test пропущен (итого 27), так какAKYLDASH_OPENSEARCH_URLне задан; структура JSON-каталога проверена.Независимый review: есть блокирующие замечания.
tools/build_search_topic_taxonomy.py:57–60иdocs/product/search-catalog-v1.md:108–110:group_forвыбирает первый regex match, не проверяя остальные. В JSON 77 корневых рубрик совпадают с несколькими правилами; например «Иностранные инвестиции» совпадает сinternationalиeconomy, но автоматически попадает в первую группу. Поэтому утверждение, что неоднозначные рубрики направляются вreview_required, неверно. Нужно явно отправлять multi-match на ручную проверку либо обосновать и проверить приоритеты, затем обновить экспорт и счётчики.tools/build_search_topic_taxonomy.py:120–126: отсутствующий, нечитаемый или невалидныйdocument.jsonпревращается в пустой список, аprocessedвсё равно увеличивается. Пересборка может молча выпустить неполную таксономию с завышенным числом обработанных документов. Ошибка должна останавливать экспорт либо явно фиксироваться и отражаться в счётчиках.Проверки прошли: backend suite — 23 теста, 1 OpenSearch integration test пропущен без
AKYLDASH_OPENSEARCH_URL; повторный экспорт совпал с закоммиченным JSON по содержимому. Остальные проверенные изменения API/legal-force и версионирование/changelog блокирующих замечаний не вызвали.Повторный независимый review: оба предыдущих замечания исправлены — неоднозначные regex-совпадения теперь попадают в
review_required, а отсутствующий/битый JSON successful-записи останавливает сборку.Остался блокирующий случай полноты:
tools/build_search_topic_taxonomy.py:128принимает объект безgeneral_classifiers(например{}) как пустую иерархию; неверный тип поля также молча игнорируется вadd_nodes. Я проверил: такая successful-запись даёт успешный результатdocuments=1, nodes=0. Нормализатор всегда записываетgeneral_classifiersкак список, поэтому при отсутствии поля или неверном типе сборка должна завершаться ошибкой; добавьте проверку и тест.Проверки: backend suite — 25 тестов пройдены, один OpenSearch integration test пропущен без
AKYLDASH_OPENSEARCH_URL; полный экспорт повторён и семантически совпадает с JSON в PR (209958 документов, 2065 узлов, 687 корней, 328 на ручной проверке). API/legal-force, версия и changelog при повторной проверке без новых блокирующих замечаний.Повторный независимый review текущего PR
f8f98df: прежние замечания устранены. Все три проверки подтверждены: неоднозначные правила ведут вreview_required; missing/corrupt/non-object normalized JSON и отсутствующий/не-listgeneral_classifiersзавершают build ошибкой; неверный тип вложенногоGeneralClassifiersи не-object узлы также отклоняются.Noneдля дочерней ветви остаётся допустимым листом, что соответствует нормализатору.Полный backend suite: 27 тестов пройдены, один OpenSearch integration test пропущен без
AKYLDASH_OPENSEARCH_URL;git diff --checkчистый. Повторно просмотрел остальной diff: API/legal-force, индексация, версия и changelog без блокирующих замечаний. Review завершён без блокирующих замечаний.Финальный независимый review текущего PR
000cf46: без блокирующих замечаний. Все три прежних findings по классификации и полноте экспорта остаются решёнными: неоднозначные совпадения идут вreview_required; missing/corrupt/non-object JSON, отсутствующий или неверного типаgeneral_classifiers, а также повреждённые вложенные ветви/узлы останавливают сборку. Точечные проверки этих сценариев прошли.Changelog уточнён под итоговый scope: описывает фильтр юридической силы и экспорт полной иерархии как черновика, отдельно фиксируя, что тематическая навигация отложена до ручного утверждения. Backend suite: 27 passed, 1 OpenSearch integration test skipped без
AKYLDASH_OPENSEARCH_URL;git diff --checkчистый. Review завершён без блокирующих замечаний.