927 Commits

Author SHA1 Message Date
Andrey Epifancev
dfccd209a7 fix(realtime-table): плавная прокрутка колесом с накоплением цели вместо мгновенного прыжка
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:37:02 +04:00
Andrey Epifancev
36d8192221 perf(realtime-table): шаг прокрутки колесом мыши ×2 (AURORA-1944)
Хук useWheelScrollStep перехватывает щелчок колеса мыши над таблицей и
прокручивает вдвое больше (~100 px браузера -> 200 px). Тачпад, Ctrl и
Shift + колесо, горизонтальная прокрутка и поля ввода не меняются.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:26:04 +04:00
Andrey Epifancev
ef83a6c361 test(realtime-table): шаг прокрутки колесом — чистые функции
Чистые функции getWheelScrollDelta и canScrollBy для шага прокрутки
колесом мыши в таблице форм (AURORA-1944), с тестами node:test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 18:26:04 +04:00
Andrey Epifancev
2be6f08555 docs(openspec): aurora-1843 — решения 29.10 (полосы загрузки, ускорение поиска) и рулинги R-12…R-22, O-8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:31:03 +04:00
Andrey Epifancev
251a14c05b Merge #243: ускоренный серверный поиск свода 2 из #241
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:28:32 +04:00
Andrey Epifancev
eb7efa2d34 Merge #241: ускоренный серверный поиск свода 2 (c8e957b)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:28:29 +04:00
Andrey Epifancev
c8e957b13d perf(svod2): ускорен серверный поиск свода 2 без изменения результата
Поиск в v3.svod2_lines строил jsonb header || contract_summary || contract_detail на каждую
строку, разворачивал его в jsonb_each и прогонял каждое значение через svod2_casefold, а числа
через svod2_js_number_text. Теперь:
- разбор поисковой строки (числа возможны, нет U+0001, нужные пары таблицы регистра) делается
  один раз в CTE q; раньше при подстановке SQL-функции выражение нормализации p_search
  вычислялось на каждое значение каждой строки;
- значения берутся напрямую из колонок, без jsonb; склеиваются и проверяются одним strpos через
  разделитель U+0001 (со строкой поиска, где есть U+0001, значения проверяются по одному);
- регистр данных приводится только по парам таблицы, чей результат есть в строке поиска;
- числа в текст JS переводятся, только если все символы строки возможны в записи числа, и
  только если по остальным значениям совпадения нет; нули без обращения к plpgsql;
- v_svod2_go и v_svod2_rf с SET jit = off (JIT плана добавлял сотни миллисекунд).

Тесты: поиск svod2_lines равен прежнему поиску по jsonb (эталонный SQL в тесте) на обоих листах
для 55 строк, включая числа, экспоненту, NaN и Infinity, стык значений, U+0001, ненормализованные
строки; состав колонок contract_* закреплён тестом.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 14:07:01 +04:00
Andrey Epifancev
60b963c573 Merge branch 'feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf 2026-10-29 13:21:51 +04:00
Andrey Epifancev
1b8a1a44ad fix(svod2): после смены условий старые строки не рисуются, пока нет ответа нового поколения (полосы загрузки)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 13:21:51 +04:00
Andrey Epifancev
0a74c9ebc0 Merge branch 'feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf 2026-10-29 13:18:19 +04:00
Andrey Epifancev
ea6915c52f fix(svod2): при поиске/фильтре на глубине total берётся из запасного offset=0, а не из долгого ответа за концом списка
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 13:18:13 +04:00
Andrey Epifancev
eef358c56e feat(svod2): полосы загрузки в строках-заглушках (Skeleton, как у MRT при «Обновить»)
Ячейки строк с data-svod2-placeholder рисуют MUI Skeleton wave высотой 20 с детерминированной шириной.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 13:18:13 +04:00
Andrey Epifancev
85769602b9 Merge origin/feat/236-aurora-1843-svod2-server-paging-web: база обновлена на исправленный 1842
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:37:07 +04:00
Andrey Epifancev
e3a2683b1d Merge origin/feat/236-aurora-1843-svod2-server-paging в web: исправленная база 1842
Конфликты в Svod2Page.jsx (импорты, content) и svod2Styles.test.js разрешены
объединением: серверная пагинация 1843 плюс grid-no-grow, pinning и портал заголовка 1842.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:36:58 +04:00
Andrey Epifancev
952627c653 Merge origin/feat/220-aurora-1842-svod2-column-virtual: исправления свода 2 (b834f10, 4cb0862)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:36:09 +04:00
Andrey Epifancev
7b67740029 fix(dict-vsp): заголовок «Действия» на одной линии с остальными в grid-раскладке
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-29 12:23:02 +04:00
Andrey Epifancev
4cb0862ca5 fix(svod2): заголовок без виртуализации колонок, группы над своими колонками
MRT при виртуализации колонок рисует каждую строку заголовка по индексам
листовых колонок, из-за чего двухуровневые группы разъезжались. Штатный thead
отключён (enableTableHead: false), тот же MRT_TableHead без columnVirtualizer
вставляется порталом в <table>: все заголовки сразу, стили и встроенные фильтры
MRT сохраняются. Тело по-прежнему виртуализировано по строкам и колонкам.

Стили: order -1 для портального thead, flexShrink 0 у td/th (распорки
виртуализации сжимались и сдвигали тело на 2-8 px), скрыта подложка ::before
закреплённых ячеек (перекрывала чередование фона).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:18:41 +04:00
Andrey Epifancev
05fbfd1e1d perf(form4): jit=off на v_form4_sheet_jsonb — компиляция JIT дороже выполнения
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-29 12:11:25 +04:00
Andrey Epifancev
bf64fa0dc6 fix(dict-vsp): ширины колонок как в test — grid-раскладка не должна менять вид справочника
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:10:47 +04:00
Andrey Epifancev
b834f1008d fix(svod2): grid-no-grow и enableColumnPinning для виртуализации колонок
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 12:07:38 +04:00
Andrey Epifancev
3e9979d09b docs(openspec): aurora-1843 — решения фазы 3 (R-11)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:49:04 +04:00
Andrey Epifancev
0f7c6c5179 perf: first_rows_ms свода 2 через raf-наблюдатель, прежний waitRows сохраняет RowsError и быстрый отказ (I-6)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:48:11 +04:00
Andrey Epifancev
9272ea2527 perf: правки финального ревью фазы 3 (I-4, I-5, M-11, M-13, M-14, T15.2, T17.1, T17.3)
Селектор строк данных свода 2 исключает скелетоны MRT, settle ждёт 0 скелетонов;
first_rows_ms через waitForFunction(raf); счётчики загрузки не пишутся в запись фильтра;
scale_compare различает view/search; api_split не считает строки для facets;
README: порядок до/после и новые метрики.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:46:05 +04:00
Andrey Epifancev
558ad815e0 perf: api_split, explain_manual и scale_compare для страниц и вариантов свода 2; README
api_split: GO/RF полный и compact ответ страницей 300, /facets, RF compact с поиском.
explain_manual: svod2_go_page, svod2_rf_page, svod2_rf_search, svod2_go_facets
(год из манифеста). scale_compare: svod2_key разводит полный ответ, страницу и facets.
README: раздел «Свод 2 после AURORA-1843» (порядок до/после, сверка, команды, --only/--repeats).
Тесты: perf/tests/test_svod2_analysis.py.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-29 00:34:11 +04:00
Andrey Epifancev
4e5ba53811 perf: svod2-memory — final без повторного выбора «Все ССП/РФ», ожидание стабилизации строк
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:32:09 +04:00
Andrey Epifancev
3363291801 perf: сценарий памяти свода 2 (GO «все» → RF «все» → GO)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:30:12 +04:00
Andrey Epifancev
5dc6662767 perf: filter_result_ms не включает таймаут ожидания поиска на сборке «до»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:28:34 +04:00
Andrey Epifancev
85c544b350 perf: scroll.spec — свод 2 со страницами: заглушки, время до первых строк, суммарные байты
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:27:01 +04:00
Andrey Epifancev
a663da505a perf: свод 2 — сверка страниц, поиска и вариантов с экраном «до» на данных стенда
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:23:34 +04:00
Andrey Epifancev
fbc3601673 perf(web): свод 2 — refine по условиям данных, измерение высоты вне загрузки, окно по поколению
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:16:41 +04:00
Andrey Epifancev
d74f5286f9 perf(web): свод 2 — refine во время первой загрузки, «Найдено» без ошибки, измеренная высота строки
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:03:43 +04:00
Andrey Epifancev
9ffb47d4e7 docs(openspec): aurora-1843 — решения R-9, R-10
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 00:03:15 +04:00
Andrey Epifancev
1aa138a839 perf(web): свод 2 — строки страницами с сервера, поиск, фильтры и варианты через API
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:26:30 +04:00
Andrey Epifancev
325c1c5f15 perf(web): свод 2 — begin(load) не очищает данные до первого ответа
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:22:43 +04:00
Andrey Epifancev
78e06583f4 perf(web): свод 2 — состояние вкладки с поколениями запросов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:21:04 +04:00
Andrey Epifancev
900a3c6535 perf(web): свод 2 — правка по biome (pages.at(-1))
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:19:09 +04:00
Andrey Epifancev
a9a05c2360 perf(web): свод 2 — чистая логика окна страниц, параметров и вариантов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:19:00 +04:00
Andrey Epifancev
2421f7ddd5 test(web): свод 2 — окно строк через отступы виртуализатора
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:17:42 +04:00
Andrey Epifancev
782a04381b Правки финального ревью фазы 1: M-1, M-2, M-5
- M-1: поиск по перекрытым полям contract_summary (ооо лютик, дс-2, дс-1) и неперекрытому (70), явные assert для строки 910004
- M-2: в лог db_time вместо значений поиска и фильтров пишутся признаки has_*/search_len; unit-тест на caplog
- M-5: total читается по имени столбца total_count

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:12:14 +04:00
Andrey Epifancev
100dba4a90 docs(openspec): aurora-1843 — решения фазы 1 (R-5..R-8)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:10:42 +04:00
Andrey Epifancev
db28138b5b perf(api): свод 2 — новый режим страниц с total и эндпоинт вариантов фильтров
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:56:34 +04:00
Andrey Epifancev
e3a9a08e84 perf(api): свод 2 — страницы и варианты фильтров в репозитории и сервисе
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:53:16 +04:00
Andrey Epifancev
f5bccc5ba2 test(api): свод 2 — поиск из пробелов в сверке с оракулом
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:50:27 +04:00
Andrey Epifancev
e81df1d71e fix(api): свод 2 — варианты фильтров без коррелированного подзапроса поиска, откат засева в teardown
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:50:04 +04:00
Andrey Epifancev
b612178b12 fix(tests): тесты тяжёлых GET — непустые данные свода 2, gzip, правки докстрингов
Фикстура свода 2 достроена до 6 строк на GO и RF по двум орг. единицам с разными section_code;
все случаи SVOD2_CASES проверяют непустоту. Тест rf-rollup переименован (фиксирует существующий дефект),
добавлен тест gzip, в api_split.py оставлены только GET-места.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:43:31 +04:00
Andrey Epifancev
38990dcaf6 docs(openspec): aurora-1848 — решения R-1..R-5 без обсуждения
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:40:58 +04:00
Andrey Epifancev
719f568863 perf(api): свод 2 — общий отбор svod2_lines, страницы с total_count, варианты фильтров в SQL
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:40:41 +04:00
Andrey Epifancev
88c37f97fa fix(perf): compare_responses — устойчивый dump, не-JSON тела, strip_response без result
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:30:49 +04:00
Andrey Epifancev
b3899cf6dc perf(analysis): compare_responses — снимок и сравнение ответов тяжёлых GET
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:29:05 +04:00
Andrey Epifancev
d9aa47388a perf(analysis): api_split — размер ответа на проводе (wire_bytes)
Цикл замера вынесен в measure(); добавлен wire_bytes (num_bytes_downloaded,
байты после сжатия) рядом с декодированным размером. В .md - колонка
«на проводе, МБ». Docstring: актуальные места X-DB-Time-Ms и остаток после
задач A (склейка строк, gzip, передача, распаковка; без pydantic).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:27:08 +04:00