fix(editor): короткие wrong-layout префиксы матчатся по заголовку (#283) #287

Merged
vvzvlad merged 1 commits from fix/283-short-remap-title into develop 2026-07-02 14:11:26 +03:00
Collaborator

Summary

Догоняющий фикс к #285: правит регресс, который нашёл @vvzvlad в #283/сщ (в неправильной раскладке = co) не находит Code, хотя /co находит.

Причина: гейт из #285 отбрасывал ЛЮБОЙ перемапленный (wrong-layout) кандидат короче 3 символов целиком. Это убивало легитимный короткий префикс /сщco, который должен фаззи-матчить ЗАГОЛОВОК «Code».

Фикс — вместо глухого порога по длине градация по ТИПУ совпадения:

  • оригинальный запрос — полный матч (title / description / searchTerms), как раньше;
  • перемапленный кандидат ≥3 символов — полный матч;
  • перемапленный кандидат 1–2 символа — только ЗАГОЛОВОК (fuzzyMatch по title), без подстрочного матча по description/searchTerms.

Так /сщco снова матчит заголовок «Code», а шум /cyсн и /bи остаётся отсечён (они всплывали Footnote только через подстроку в searchTerm «сноска»/«примечание», а не через заголовок).

closes #283

How verified

Прогнал на коде ветки, из apps/client:

  • tsc --noEmit — 0 ошибок по menu-items;
  • eslint (оба файла) — чисто;
  • vitest slash-menu/32 passed (4 файла). Добавил позитивы /сщ→Code (репорт из #283) и /co→Code (санити оригинального пути); ретейн-негативы /cy и /b (Footnote НЕ всплывает) сохранены и не-вакуумны.

Внутреннее ревью логики (отдельный субагент) — вердикт APPROVE, замечаний нет: проследил /сщco→fuzzy(«Code»)=true, /cyсн→fuzzy(«Footnote»)=false; remapped (все ремапы) используется и в фильтре, и в tie-break; мёртвого кода/старых ссылок нет; пустой запрос по-прежнему показывает всё.

Checklist

  • критерии из #283 выполнены (/сщ→Code работает)
  • вне заявленного scope ничего не менялось
## Summary Догоняющий фикс к #285: правит регресс, который нашёл @vvzvlad в #283 — `/сщ` (в неправильной раскладке = `co`) не находит **Code**, хотя `/co` находит. Причина: гейт из #285 отбрасывал ЛЮБОЙ перемапленный (wrong-layout) кандидат короче 3 символов целиком. Это убивало легитимный короткий префикс `/сщ`→`co`, который должен фаззи-матчить ЗАГОЛОВОК «Code». Фикс — вместо глухого порога по длине градация по ТИПУ совпадения: - оригинальный запрос — полный матч (title / description / searchTerms), как раньше; - перемапленный кандидат ≥3 символов — полный матч; - перемапленный кандидат 1–2 символа — только ЗАГОЛОВОК (fuzzyMatch по title), без подстрочного матча по description/searchTerms. Так `/сщ`→`co` снова матчит заголовок «Code», а шум `/cy`→`сн` и `/b`→`и` остаётся отсечён (они всплывали Footnote только через подстроку в searchTerm «сноска»/«примечание», а не через заголовок). closes #283 ## How verified Прогнал на коде ветки, из `apps/client`: - `tsc --noEmit` — 0 ошибок по menu-items; - `eslint` (оба файла) — чисто; - `vitest slash-menu/` — **32 passed** (4 файла). Добавил позитивы `/сщ`→Code (репорт из #283) и `/co`→Code (санити оригинального пути); ретейн-негативы `/cy` и `/b` (Footnote НЕ всплывает) сохранены и не-вакуумны. Внутреннее ревью логики (отдельный субагент) — вердикт APPROVE, замечаний нет: проследил `/сщ`→`co`→fuzzy(«Code»)=true, `/cy`→`сн`→fuzzy(«Footnote»)=false; `remapped` (все ремапы) используется и в фильтре, и в tie-break; мёртвого кода/старых ссылок нет; пустой запрос по-прежнему показывает всё. ## Checklist - [x] критерии из #283 выполнены (`/сщ`→Code работает) - [x] вне заявленного scope ничего не менялось
agent_coder added 1 commit 2026-07-02 14:10:14 +03:00
The #285 gate dropped every remapped (wrong-layout) candidate shorter than 3
chars, which broke the legitimate short prefix '/сщ' -> 'co' -> Code while '/co'
still worked. Replace the blanket length filter with a match-TYPE gate: the
original query and remaps >= 3 chars match fully (title/description/searchTerms);
a short (1-2 char) remap is restricted to a TITLE fuzzy-match. So '/сщ' -> 'co'
matches the 'Code' title again, while '/cy' -> 'сн' and '/b' -> 'и' still do not
surface Footnote (they only ever leaked in via the 'сноска'/'примечание'
searchTerm substrings, not the title).

Adds positive tests for /сщ and /co; keeps the /cy and /b negatives.

closes #283

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agent_coder added the review/needs label 2026-07-02 14:10:14 +03:00
vvzvlad merged commit f8c4343fa8 into develop 2026-07-02 14:11:26 +03:00
Sign in to join this conversation.