717 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
b134cfd118 test(api): свод 2 — засев, эталон прежнего ответа и тесты-оракулы нового режима (красные)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 21:19:22 +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
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
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
Andrey Epifancev
6e607b1647 docs(openspec): aurora-1843-svod2-server-paging — proposal, spec, design
Свод 2: серверная постраничная загрузка (поиск, три фильтра, total,
варианты фильтров) и компактный ответ; фронт догружает строки окном
страниц; замеры памяти, времени до первых строк, байтов и шага скролла.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 20:27:17 +04:00
Andrey Epifancev
399234a827 perf(web): свод 2 — виртуализация колонок и статичные стили ячеек одним CSS-правилом
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 18:12:41 +04:00
Andrey Epifancev
2cb9006786 perf(web): форматтер чисел свода 1 и сводных проектов создаётся один раз
AURORA-1835: Cell в scaleColumns создавал Intl.NumberFormat на каждую ячейку.
Форматирование вынесено в formatSummaryAmount (summaryFormat.js) с модульным форматтером.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 18:09:12 +04:00
Andrey Epifancev
2a287480b6 docs(openspec): архивировать perf-profiling (#202)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:12:18 +04:00
aep
724a55787f Merge pull request 'Профилирование фронта и бэка: стенд, замеры, отчёт (#202)' (#203) from feat/202-perf-profiling into test 2026-10-28 16:11:06 +03:00
Andrey Epifancev
bc52212811 perf: REPORT, README, design.md — правки по финальному ревью
- REPORT: правки FORM_4 — вывод по коду, не замер (I-1); цена фильтра свода
  по записям основного прогона, hotspots — верхняя граница (I-2); М6 поднята
  до P1, пояснение состава топ-5 (I-4); формулировки кадров, малых листов,
  admin-контроля, М8, время прогона (M-1, M-2, M-9, M-11); раздел 6 дополнен,
  новый раздел 6а с находками при подготовке стенда (M-10, M-12, T7.3)
- README: контроль 4x с отдельным тегом и предупреждением (I-3), команды
  modal-renders и netlog-sizes (M-4), гипотезы в «Как читать» (T8.7)
- design.md: R-7, правило приоритетов и топ-5, решения волны исправлений
- план: заметка о замене CPU [1,4,6] решением человека (M-12)

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:34:58 +04:00
Andrey Epifancev
5f4afc0926 perf: правки по финальному ревью — скрипты, данные, фильтр long tasks
- run-all.sh: копия run-all.status.json в report-data с относительными путями;
  пример control4x с отдельным тегом и предупреждением (I-3, M-8); очищены
  три закоммиченные копии статуса
- lib/modal.ts: long tasks по пересечению окна (tasksInWindow), тест (M-7)
- scale_compare.py: строки листов на момент скролла (до grow), пояснения (M-6)
- hotspots_summary.py: оговорка о разбавлении «на шаг» (M-5)
- netlog_sizes.py + report-data/20261026-s1/analysis/netlog-sizes.md (M-3)

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:34:58 +04:00
Andrey Epifancev
5c1822026d perf: REPORT — пометка контрольных цифр в топ-5
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:08:33 +04:00
Andrey Epifancev
eb5e40e9ef perf: README — порядок разбора и отчёта, web-sourcemap, hotspots
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:08:12 +04:00
Andrey Epifancev
af0975100b perf: отчёт о проблемах производительности
perf/REPORT.md: резюме и ответы на жалобы заказчика, методика и окружение,
таблица 13 мест (file:line, доказательство, влияние, приоритет, подтверждено
замером), подробности, статический разбор без замера, что не проверено.

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:08:12 +04:00
Andrey Epifancev
9923a7b88d perf: контроль CPU 4x, API против X-DB-Time-Ms, рендеры модалок
- report-data/20261026-control-s1: CPU 4x, 1 повтор (FORM_2/AHR, свод 1 MAIN,
  свод 2 GO, модалка выбора ВСП на большом листе), отдельный run_id
- analysis/api-split: полное время API против заголовка X-DB-Time-Ms
  (вместо py-spy, которому на macOS нужен root)
- analysis/modal-renders, hotspots: рендеры модалок прогона s1, циклы CSS и
  matchMedia со вторым листом

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:08:12 +04:00
Andrey Epifancev
8e9f53a478 perf: скрипты разбора и сводные данные прогонов 20261026
- perf/analysis: разбор trace (timeline_breakdown), CPU-профилей с source maps
  (cpuprofile_top), heap snapshots (heapdiff), циклов памяти, сравнения масштабов,
  ручной EXPLAIN вложенных запросов (explain_manual), API против X-DB-Time-Ms
  (api_split), сводка горячих точек; тесты ядра в perf/tests/test_analysis.py
- perf/e2e/scenarios/hotspots.spec.ts: CPU-профиль, рендеры React, мутации DOM
  после фильтра, рост CSS-правил по циклам (вне run-all)
- prod-сборка с source maps: PERF_SOURCEMAP=1, perf/stand.sh web-sourcemap (:8082)
- perf/report-data/20261026-s1, 20261026-s2 (summary, sql, analysis, explain-manual),
  t5-types (иллюстрация CPU 6x)
- design.md: решения T10b без обсуждения

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:43:46 +04:00
Andrey Epifancev
0c2048a9f1 docs(openspec): рулинги R-5 и R-6 перед анализом
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:49:13 +04:00
Andrey Epifancev
05d1586006 perf: исправления run-all по ревью (раунд 1)
- C1: trace только на повторе 0 при числе повторов > 1 (lib/trace.ts
  shouldTrace) в scroll и scroll-coauthor: admin-контроль, control4x и
  PERF_S2_REPEATS=1 больше не теряют единственную запись (traced=1).
- I1: масштаб 2 - PERF_LOAD_TIMEOUT_MS=40 мин и PERF_TEST_TIMEOUT_MS=90 мин,
  если не заданы.
- I2: шаг aggregate падает при сбое perfkit.aggregate/копирования и если
  summary.json не создан; тесты run-all (perf/tests/test_run_all.py).
- M2: после modals_profiling останавливается preview :8081.
- README, design.md: решения раунда.

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:12:40 +04:00
Andrey Epifancev
ab3d9e89a3 docs(openspec): рулинг R-4 о повторах на масштабе 2
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:02:17 +04:00
Andrey Epifancev
29867535b0 perf: полный прогон run-all.sh и правки по ревью
- perf/run-all.sh: масштабы 1 и 2, шаги reset -> gen -> verify -> stand ->
  preflight -> scroll -> coauthor -> grow -> modals -> modals_profiling ->
  memory -> memtrend -> [control4x] -> bench -> aggregate; лог и
  run-all.status.json, возобновление (PERF_STEPS, PERF_SKIP_RESET),
  сухой режим с оценкой длительности, PERF_S2_REPEATS/PERF_S2_TARGETS,
  контроль CPU 4x (PERF_CONTROL_TARGETS).
- Основная метрика: main_thread_ms и main_thread_ms_per_step в скролле
  (CDP TaskDuration), frame_excess_ms; в summary.md первыми строками.
- SQL-статистика по шагам: PERF_SQLSTATS_TAG -> sql/<шаг>/ (sqlstats --out).
- netlog: тела /auth/ не пишутся, поля password/token/secret вырезаются.
- scroll.spec: уникальные имена целей (лист ССП с суффиксом /ssp, год в
  отчёте проекта) - иначе Playwright не запускал файл из-за дублей.
- PERF_TRACE=0 для прогонов с одним повтором.
- README: scroll-coauthor, run-all, возобновление, без CPU 4/6 в матрицах.
- design.md: уточнена формулировка R-2, решения Task 10a.

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 03:01:33 +04:00
Andrey Epifancev
d58fc3de29 docs(openspec): рулинг R-3 по исполнению Task 10
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 02:38:53 +04:00
Andrey Epifancev
fdc8ecb2a3 perf: замеры бэка
Сетевой лог сценариев, bench запросов, pg_stat_statements и EXPLAIN,
aggregate исключает трассировочные повторы (O-9).

Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 02:36:46 +04:00
Andrey Epifancev
4a539d803f perf: memtrend считает с цикла 1, плато по второй половине
Refs #202

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 02:19:55 +04:00