913 Commits

Author SHA1 Message Date
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
Andrey Epifancev
a62add9779 perf(api): свод 2 — миграция 0053: нормализаторы поиска как в JS и компактная проекция
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:24:34 +04:00
Andrey Epifancev
604e277371 perf(api): отчёты и сводные проектов отдают готовый JSON из Postgres
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:24:14 +04:00
Andrey Epifancev
b134cfd118 test(api): свод 2 — засев, эталон прежнего ответа и тесты-оракулы нового режима (красные)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 21:19:22 +04:00
Andrey Epifancev
ca7160124a perf(api): GET сводов 1 и 2 отдают готовый JSON из Postgres
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:16:36 +04:00
Andrey Epifancev
d8dba2f7be perf(api): GET листа отдаёт готовый JSON из Postgres без SheetResponse на строку
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:12:09 +04:00
Andrey Epifancev
174ec73732 test(api): свод 2 — Python-оракул экрана, сверенный с векторами JS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:11:17 +04:00
Andrey Epifancev
adcb9d1d3b test: свод 2 — JS-оракул поиска, фильтров и вариантов экрана «до» и векторы
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:09:29 +04:00
Andrey Epifancev
dbf90477d2 docs(openspec): aurora-1843 — рулинги контроллера R-1..R-4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:08:18 +04:00
Andrey Epifancev
7094fe839f perf(api): хелпер ответа из готовых JSON-строк и SQL-выражение строки
Добавлены list_json_response (обёртка BaseListResponse из готовых строк),
ROW_COLUMNS, row_json_select и fetch_row_texts для тяжёлых GET (AURORA-1848).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:07:40 +04:00
Andrey Epifancev
0175759f95 test(api): фикстура db_session и снимок схемы OpenAPI тяжёлых GET
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:06:16 +04:00
Andrey Epifancev
c7ef4032d6 docs(plan): aurora-1843 — план реализации
Три фазы — три PR стеком: сервер (SQL, API, тесты-оракулы первыми),
фронт (окно страниц в той же таблице), стенд замеров. Решения плана
дописаны в design.md (#23–#34).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:06:06 +04:00
Andrey Epifancev
1d885d1bbd docs(plan): aurora-1848 — план реализации
Две фазы: A (feat/233-aurora-1848-sheet-json-no-pydantic, PR в test) и B (feat/233-aurora-1848-sheet-json-no-pydantic-b, стеком на A). Решения планирования дописаны в design.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:02:48 +04:00
Andrey Epifancev
48f422df3a docs(openspec): aurora-1843 — без ограничения длины поиска и фильтров (#22 отменено)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 20:49:25 +04:00
Andrey Epifancev
9d68cd5e1a docs(openspec): aurora-1843 — поведение свода 2 без изменений, решения 28.10
Поиск, колоночные фильтры, варианты фильтров и «Найдено N из M» — с точной
семантикой экрана (matchesSearch, MRT equals, faceting TanStack); регистр
без зависимости от локали БД; пороги — цели, а не условие слияния;
решения контроллера (три фазы/ветки, prefetch страницы 1, окружение тестов).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 20:48:30 +04:00