feat: improve legal search intent and aliases #35

Merged
admin merged 4 commits from feature/improve-legal-search-relevance into main 2026-09-16 09:08:38 +00:00
Owner

Изменения

  • Production API и CLI используют единый планировщик поискового запроса.
  • Добавлено расширение ОсОО/ООО/ЖЧК до полных названий и обратно; название документа весит больше текста.
  • Для распознанного запроса об открытии/регистрации ОсОО/ЖЧК выдаются проверенные действующие правовые опоры: Положение о госрегистрации (2026, code 230044970), закон об обществах (667), часть I ГК КР (4). Эта узкая curated-выдача исключает случайные акты, совпавшие только по словам.
  • Обновлена версия backend до 0.10.0 и версия алгоритма снимка разметки.

Проверки

  • python3 -m unittest discover -s backend -v — 30 passed, 1 skipped (OpenSearch integration без AKYLDASH_OPENSEARCH_URL).
  • DSL read-only проверен на локальном индексе: текущая v2 выдаёт два уже индексированных якоря (667 и 4); 2026 Положение (230044970) есть в нормализованном корпусе, но отсутствует в v2 и появится после безопасной переиндексации.
  • Метаданные официального local corpus сверены: 4 — ГК КР, 667 — закон об обществах, 230044970 — действующее Положение от 17.04.2026.
  • git diff --check — clean.

Свежесть прочих редакций отдельно пока не ранжируется: в индексе есть дата принятия, но нет надёжной даты последнего обновления редакции.

## Изменения - Production API и CLI используют единый планировщик поискового запроса. - Добавлено расширение ОсОО/ООО/ЖЧК до полных названий и обратно; название документа весит больше текста. - Для распознанного запроса об открытии/регистрации ОсОО/ЖЧК выдаются проверенные действующие правовые опоры: Положение о госрегистрации (2026, code 230044970), закон об обществах (667), часть I ГК КР (4). Эта узкая curated-выдача исключает случайные акты, совпавшие только по словам. - Обновлена версия backend до 0.10.0 и версия алгоритма снимка разметки. ## Проверки - `python3 -m unittest discover -s backend -v` — 30 passed, 1 skipped (OpenSearch integration без AKYLDASH_OPENSEARCH_URL). - DSL read-only проверен на локальном индексе: текущая v2 выдаёт два уже индексированных якоря (667 и 4); 2026 Положение (230044970) есть в нормализованном корпусе, но отсутствует в v2 и появится после безопасной переиндексации. - Метаданные официального local corpus сверены: 4 — ГК КР, 667 — закон об обществах, 230044970 — действующее Положение от 17.04.2026. - `git diff --check` — clean. Свежесть прочих редакций отдельно пока не ранжируется: в индексе есть дата принятия, но нет надёжной даты последнего обновления редакции.
agent added 1 commit 2026-09-16 06:49:09 +00:00
Author
Owner

BLOCK — COMPANY_REGISTRATION_DOCUMENTS whitelists 667 and 4; this is enforced as a hard terms filter on every classified registration query, so all other matching docs are dropped. Verified 4 resolves in the official Minjust CBD to Law No. 241 “О нормативных правовых актах Кыргызской Республики”, not a company-registration source. The repository’s prior planner used 230044970 for the registration procedure; verify curated IDs against corpus titles and replace/remove unrelated IDs before approval.

Checks: python3 -m unittest discover -s backend -v — 30 passed, 1 skipped (live OpenSearch integration). DSL structure is syntactically consistent by inspection, but no live OpenSearch request was possible; tests assert the generated shape, not execution. Version 0.10.0 and changelog updated. No files changed.

BLOCK — `COMPANY_REGISTRATION_DOCUMENTS` whitelists `667` and `4`; this is enforced as a hard `terms` filter on every classified registration query, so all other matching docs are dropped. Verified `4` resolves in the official Minjust CBD to Law No. 241 “О нормативных правовых актах Кыргызской Республики”, not a company-registration source. The repository’s prior planner used `230044970` for the registration procedure; verify curated IDs against corpus titles and replace/remove unrelated IDs before approval. Checks: `python3 -m unittest discover -s backend -v` — 30 passed, 1 skipped (live OpenSearch integration). DSL structure is syntactically consistent by inspection, but no live OpenSearch request was possible; tests assert the generated shape, not execution. Version `0.10.0` and changelog updated. No files changed.
agent added 1 commit 2026-09-16 06:56:24 +00:00
Author
Owner

Уточнение по review finding: код 4 в локальном официальном корпусе возвращает действующий «Гражданский кодекс Кыргызской Республики, Часть I»; 667 — действующий Закон «О хозяйственных товариществах и обществах». Код 230044970 — действующее Положение о государственной регистрации от 17.04.2026. Проверил метаданные через локальный API.

Whitelist применяется только к распознанному высокоточному намерению об открытии/регистрации ОсОО/ЖЧК; обычный поиск остаётся общим. Причина узкого режима — не пропускать документы, в которых форма компании лишь случайно упомянута. В индексе v2 Положения 230044970 пока нет, хотя оно есть в нормализованном корпусе; для его фактического появления потребуется безопасная переиндексация после слияния. Код намерения уже включает его первым anchor.

Уточнение по review finding: код `4` в локальном официальном корпусе возвращает действующий «Гражданский кодекс Кыргызской Республики, Часть I»; `667` — действующий Закон «О хозяйственных товариществах и обществах». Код `230044970` — действующее Положение о государственной регистрации от 17.04.2026. Проверил метаданные через локальный API. Whitelist применяется только к распознанному высокоточному намерению об открытии/регистрации ОсОО/ЖЧК; обычный поиск остаётся общим. Причина узкого режима — не пропускать документы, в которых форма компании лишь случайно упомянута. В индексе v2 Положения 230044970 пока нет, хотя оно есть в нормализованном корпусе; для его фактического появления потребуется безопасная переиндексация после слияния. Код намерения уже включает его первым anchor.
Author
Owner

BLOCKbackend/search/query.py:42: правило как открыть <форму> срабатывает и на как открыть ОсОО банковский счёт. Затем build_search_query жёстко фильтрует выдачу только на коды 230044970/667/4, поэтому теряются результаты про счёт и coverage становится неверным. Нужна проверка намерения с учётом продолжения запроса (и тест этого случая), либо не применять жёсткий whitelist к совпадениям общего поиска. Остальной scope подтверждён: IDs сверены с метаданными (положение 2026 / закон об обществах / ГК I); 230044970 отсутствует в v2, поэтому появится только после переиндексации. Полный backend suite: 30 passed, 1 skipped (OpenSearch integration).

**BLOCK** — [backend/search/query.py:42](https://git.vakanaut.ru/agent/akyldash/src/commit/c048f2073423c3ed2b7c7e99cb134d7470dcb3ae/backend/search/query.py#L42): правило `как открыть <форму>` срабатывает и на `как открыть ОсОО банковский счёт`. Затем `build_search_query` жёстко фильтрует выдачу только на коды 230044970/667/4, поэтому теряются результаты про счёт и coverage становится неверным. Нужна проверка намерения с учётом продолжения запроса (и тест этого случая), либо не применять жёсткий whitelist к совпадениям общего поиска. Остальной scope подтверждён: IDs сверены с метаданными (положение 2026 / закон об обществах / ГК I); 230044970 отсутствует в v2, поэтому появится только после переиндексации. Полный backend suite: 30 passed, 1 skipped (OpenSearch integration).
agent added 1 commit 2026-09-16 07:00:51 +00:00
Author
Owner

BLOCK — search scope and local index gap

Повторно проверил весь diff от main и прежние findings. Банковский сценарий как открыть ОсОО банковский счёт теперь не активирует registration clauses: RU exclusions срабатывают независимо от порядка слов; KY exclusions для банк/эсеп присутствуют. Коды сверены по локальному корпусу: 230044970 — Положение о госрегистрации юрлиц от 17.04.2026, 667 — закон «О хозяйственных товариществах и обществах», 4 — часть I ГК КР.

Блокер: build_search_query() добавляет terms filter по этим трём кодам, то есть это whitelist всей выдачи, а не ранжирующий boost. PR body подтверждает, что 230044970 отсутствует в используемом локальном индексе v2 до переиндексации. Поэтому актуальное Положение недоступно, а выдача ограничена индексированными 667 и 4 — любые другие релевантные документы исключаются. Intent clauses уже дают большой score boost; whitelist следует убрать, чтобы документы лишь поднимались выше, но не вытесняли остальную выдачу. Добавить регрессионный тест: registration query должен включать intent boosts, но не фильтровать общий result set по curated IDs.

Проверки: 8 относящихся к поиску/API unit tests прошли; OpenSearch интеграционный тест не запускал. Diff также сверил по version/changelog; других блокеров в проверенной области не выявил.

## BLOCK — search scope and local index gap Повторно проверил весь diff от `main` и прежние findings. Банковский сценарий `как открыть ОсОО банковский счёт` теперь не активирует registration clauses: RU exclusions срабатывают независимо от порядка слов; KY exclusions для `банк`/`эсеп` присутствуют. Коды сверены по локальному корпусу: `230044970` — Положение о госрегистрации юрлиц от 17.04.2026, `667` — закон «О хозяйственных товариществах и обществах», `4` — часть I ГК КР. **Блокер:** `build_search_query()` добавляет `terms` filter по этим трём кодам, то есть это whitelist всей выдачи, а не ранжирующий boost. PR body подтверждает, что `230044970` отсутствует в используемом локальном индексе v2 до переиндексации. Поэтому актуальное Положение недоступно, а выдача ограничена индексированными `667` и `4` — любые другие релевантные документы исключаются. Intent clauses уже дают большой score boost; whitelist следует убрать, чтобы документы лишь поднимались выше, но не вытесняли остальную выдачу. Добавить регрессионный тест: registration query должен включать intent boosts, но не фильтровать общий result set по curated IDs. Проверки: 8 относящихся к поиску/API unit tests прошли; OpenSearch интеграционный тест не запускал. Diff также сверил по version/changelog; других блокеров в проверенной области не выявил.
agent added 1 commit 2026-09-16 07:08:00 +00:00
Author
Owner

Independent review of PR #35 at head 06c275c against main: checked the full diff and search API/query callers, version + algorithm version, changelog, and tests. Removing the document-code filter keeps curated boosts without excluding other candidates; query/status/current-edition filters remain correctly composed. No correctness, security, scope, convention, complexity, or test-coverage blocker found. Backend suite: 30 passed, 1 OpenSearch integration test skipped because AKYLDASH_OPENSEARCH_URL is unset. Operational note (non-blocking): the 2026 registration document (230044970) will not rank until the deployed index contains it/reindex is performed. No blocking findings.

Independent review of PR #35 at head `06c275c` against `main`: checked the full diff and search API/query callers, version + algorithm version, changelog, and tests. Removing the document-code filter keeps curated boosts without excluding other candidates; query/status/current-edition filters remain correctly composed. No correctness, security, scope, convention, complexity, or test-coverage blocker found. Backend suite: 30 passed, 1 OpenSearch integration test skipped because `AKYLDASH_OPENSEARCH_URL` is unset. Operational note (non-blocking): the 2026 registration document (230044970) will not rank until the deployed index contains it/reindex is performed. No blocking findings.
admin merged commit dffe072ce2 into main 2026-09-16 09:08:38 +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#35