AURORA-1843: свод 2 — серверные страницы, поиск, фильтры и варианты (1/3, сервер) #241
Open
aep
wants to merge 18 commits from
feat/236-aurora-1843-svod2-server-paging into feat/220-aurora-1842-svod2-column-virtual
pull from: feat/236-aurora-1843-svod2-server-paging
merge into: RSHB:feat/220-aurora-1842-svod2-column-virtual
RSHB:main
RSHB:feat/284-aurora-1891-cell-click-keyboard-edit
RSHB:feat/285-aurora-1899-denomination-base-thousand
RSHB:feat/289-aurora-1900-unit-vat-labels
RSHB:feat/286-aurora-1903-smeta-export-layout
RSHB:feat/282-aurora-1893-error-alert-navigation
RSHB:feat/280-aurora-1890-cell-editability
RSHB:feat/276-aurora-1892-negative-amounts
RSHB:test
RSHB:fix/null-strip-test-contract
RSHB:feat/233-aurora-1848-sheet-json-no-pydantic-b
RSHB:feat/275-aurora-1894-error-border-toast
RSHB:feat/216-aurora-1846-form4-sheet-sum
RSHB:fix/0051-migration-collision
RSHB:feat/235-aurora-1850-upd-form-cells-subtree
RSHB:feat/215-aurora-1844-upd-form-cells-full-rows
RSHB:feat/272-aurora-1887-ahr-hide-satellite-rows
RSHB:feat/270-aurora-1907-source-sheet
RSHB:feat/266-aurora-1897-ahr-limit-period-vat-units
RSHB:feat/265-aurora-1909-ahr-manual-row-capture
RSHB:feat/264-aurora-1895-formula-localstorage
RSHB:feat/254-aurora-1906-spod-column
RSHB:feat/255-aurora-1938-transfer-econ-calc
RSHB:feat/250-aurora-1888-stages-role-filter
RSHB:feat/253-aurora-1905-form1-form4-export-layout
RSHB:feat/252-aurora-1902-form2-export-layout
RSHB:feat/251-aurora-1901-smeta-rf-column-order
RSHB:feat/249-aurora-1936-row-delete-confirm
RSHB:feat/248-aurora-1877-token-refresh
RSHB:feat/246-aurora-1944-wheel-scroll-step
RSHB:feat/236-aurora-1843-svod2-server-paging-perf
RSHB:feat/236-aurora-1843-svod2-server-paging-web
RSHB:feat/214-aurora-1841-dict-vsp-virtual
RSHB:feat/220-aurora-1842-svod2-column-virtual
RSHB:feat/234-aurora-1839-cell-memo
RSHB:feat/233-aurora-1848-sheet-json-no-pydantic
RSHB:feat/237-aurora-1845-ws-connection-cache
RSHB:feat/226-aurora-1837-cell-styles-css
RSHB:feat/207-aurora-1831-project-tn-race
RSHB:feat/208-aurora-1832-phase-dates-tz
RSHB:feat/209-aurora-1833-greenlet-dev
RSHB:feat/206-aurora-1830-users-me-local-email
RSHB:feat/212-aurora-1838-ws-immutable-update
RSHB:feat/211-aurora-1836-row-measure
RSHB:feat/205-aurora-1922-pg15-migration-0012
RSHB:feat/213-aurora-1840-sheet-modals
RSHB:feat/210-aurora-1835-svod1-formatter
RSHB:svod2-filter-fix2
RSHB:indent-export
RSHB:export-hierarchy
RSHB:svod2-filter-fix
RSHB:fix-id-column
RSHB:export-year-fix
RSHB:form3-source
RSHB:columns-svod-2
RSHB:export-optimize-refresh
RSHB:last-column
RSHB:svod-fix
RSHB:fix-columns
RSHB:form3-expense
RSHB:sattelite-fix
RSHB:delete-sattelite-rows
RSHB:form3-pages
RSHB:form1-sub_sub-fix
RSHB:sort-fix
RSHB:fixes-form
RSHB:new-expenses
RSHB:new-rows
RSHB:fix-style
RSHB:phase-template-edit
RSHB:fixes
RSHB:add-btn-reset-filter
RSHB:vsp-choice-fix
RSHB:project-filters-fix
RSHB:width-column-header-name
RSHB:task-filter-navigation
RSHB:auth
RSHB:icons-program-project
RSHB:export-optimize
RSHB:org-unit-limits
RSHB:auth-v2
RSHB:tasks-filters
RSHB:insert-row-fix
RSHB:svod-roles
RSHB:new-role-fix
RSHB:phase-edit-fix
RSHB:new-role
RSHB:delete-from-cell
RSHB:svod-cahe-and-table-direction
RSHB:direction-stage-fix
RSHB:backslash-fix
RSHB:svod
RSHB:front-svod-form-1
RSHB:projects-filters
RSHB:remove-row-fix
RSHB:computed-fix
RSHB:modal-add-year-project
RSHB:name-fix
RSHB:audit-logs-projects
RSHB:meta-form-3
RSHB:project-back-fix
RSHB:fix-sticky-columns
RSHB:fixies-3-form
RSHB:tech-num-fix
RSHB:fix-logic-limitation
RSHB:projects-fix
RSHB:3-form-project
RSHB:project-add-year-handler
RSHB:projects-summary-handler
RSHB:AURORA-1247
RSHB:projects-handlers
RSHB:vsp-choose-form2-2
RSHB:directions-fix
RSHB:add-validation
RSHB:add-checkbox-export-vsp
RSHB:fix-update-column-config
RSHB:fix-editable-columns
RSHB:add-biome-front
RSHB:vsp-choose-form2
RSHB:export-form-4
RSHB:booking-fix
RSHB:fix-front-tables
RSHB:phase-directions
RSHB:AURORA-1225
RSHB:fix-mapping-form-2-oper
RSHB:AURORA-1076-fix
RSHB:fix-add-row-program-4-form
RSHB:form2-limit-migrations
RSHB:delete-projects
RSHB:AURORA-1076
RSHB:form-4-add-row
RSHB:fix-logs
RSHB:AURORA-1206
RSHB:AURORA-894
RSHB:add-line-log-hotfix
RSHB:form-export-fix
RSHB:form-4-sql
RSHB:table-optimization-fix
RSHB:header_forms
RSHB:form-4-expense-item-filters
RSHB:entity-type-hotfix
RSHB:form-3-phases-timezones
RSHB:form-4-handlers
RSHB:export-fix
RSHB:close-date-vsp-fix
RSHB:deleted-user-auth-fix
RSHB:smeta-fix
RSHB:front-fixes
RSHB:line_id_code_full
RSHB:line_id_code
RSHB:timezones
RSHB:filenames-fix
RSHB:AURORA-1174-73
RSHB:project-sheets
RSHB:AURORA-1166
RSHB:websocket-projects
RSHB:project-front
RSHB:form3-permissions
RSHB:location_from_to_placement_type
RSHB:fix-vsp-filters
RSHB:fix-tests-and-functions
RSHB:mig2-fix
RSHB:vsp_fixes
RSHB:fix-ssp-title
RSHB:AURORA-1148
RSHB:fix-vsp-form-edit
RSHB:sql-funcs2-fix
RSHB:AURORA-1132
RSHB:logs
RSHB:AURORA-1147
RSHB:export-optimization
RSHB:AURORA-1131
RSHB:sql-funcs-fix
RSHB:vsp-dropdown-form
RSHB:form_2-back
RSHB:migrations
RSHB:websocket-self-flag
RSHB:reload-fix
RSHB:test-stand-fix
RSHB:excel-empty-fix
RSHB:requirements-fix
RSHB:AURORA-1096-back
RSHB:AURORA-1098
RSHB:AURORA-1096
RSHB:ws-user-id-fix
RSHB:expense-item-handler
RSHB:fix-date-phase
RSHB:excel-fix
RSHB:vsp-edit-field-fix
RSHB:vsp-fix-back
RSHB:vsp-back
RSHB:create-form-back
RSHB:export-direction-fix
RSHB:change-role-fix
RSHB:org-unit-users-fix
RSHB:audit-fix
RSHB:org-archive
RSHB:del_row_fix
RSHB:websocket_locks
RSHB:new_line_id
RSHB:admin-back
RSHB:form-fix
RSHB:ws
RSHB:ssp-fix
RSHB:stages-back
RSHB:form_124_write
RSHB:form_124
RSHB:new-model
RSHB:test-tsygankov
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "feat/236-aurora-1843-svod2-server-paging"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs #236 (часть 1/3;
Closes #236будет в PR 3). Jira AURORA-1843 (эпик AURORA-1834). Spec:openspec/changes/aurora-1843-svod2-server-paging/.Что сделано (фаза 1 — сервер)
0053: локаленезависимыеsvod2_casefold,svod2_js_trim,svod2_js_number_text, проекцияsvod2_compact; общий отборsvod2_lines; новыеv_svod2_go/v_svod2_rf(поиск, три колоночных фильтра,total_count, компактноеdata);v_svod2_facets.GET /svod/2/{sheet}/{year}получаетview=full|compact,search,smeta_type,smeta_direction,org_name; ответ нового режима содержитtotal. Без новых параметров ответ байт-в-байт прежний. НовыйGET /svod/2/{sheet}/{year}/facets.get_svod2_rowsиv_svod2_go_exportне менялись.db_time(только признаки и длина).Тесты
perf/analysis/svod2_search_oracle.mjs:matchesSearchиequalsдословные копии) порождает векторы; Python-порт сверен с ними; оракул служит эталоном интеграционных тестов API на засеянных данных (поиск, фильтры, варианты, «Найдено», компактная проекция, права isp).svod2_legacy_golden.json(sha256, GO/RF × 5 случаев) записан на коде «до» и не менялся.pytestна PG16: 3 известных падения (test_backend_calls_form3_add_project_and_add_line_functions, два тестаtest_export_service_query_params), 499 passed, 4 skipped.Чек-лист ручной проверки (главный контроллер)
offset=0&limit=50), sha256 распакованных тел до и после миграции.Замер до/после — добавит контроллер после прогона на стенде.
PG15 — проверено контроллером SDD (см. выше).
Rulings I made
legacy_fullживёт вapi/tests/integration/conftest.py(не в test_svod2_paging_api.py); Task 3 создаёт его там, Task 4 импортирует оттуда — иначе test_svod2_sql.py импортировал бы из тестового модуля. Цена ошибки: перенос функции.playwright --list/типы perf/e2e и замеры — главный контроллер, одним списком в финальном отчёте, не жду. Цена ошибки: нет.Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>— как требуют план (Global Constraints) и WAVE2-RULES (явное указание человека приоритетнее общей подсказки). Цена ошибки: amend/rebase трейлера.Находки (маркер, суть, статус)
;— точка с запятой в тексте засева сломает скриптb134cfdSonnet 5.5 вместо Opus 5.5 (T1,T2 — Opus)e81df1de81df1de81df1d,f5bccc5782a043(= M-5)782a043(= M-2)782a043782a043782a043325c1c5325c1c5(тест + комментарий; реализация в Task 12)d74f528d74f528d74f528(R-9; проверить измерение на стенде)d74f528(чистая shouldRefine)fbc3601(= I-2)fbc3601(максимум по отрисованным строкам, M-7); проверка на стендеfbc3601fbc3601fbc3601fbc3601(остаточно: значение не монотонно, не сбрасывается при смене условий)fbc36015dc66625dc66629272ea29272ea2(README, M-13)4e5ba534e5ba53(settle)9272ea29272ea2558ad81Haiku 5.5 вместо Opus 5.5 (см. O-3)9272ea29272ea2,0f7c6c50f7c6c50f7c6c5(raf-наблюдатель)9272ea29272ea2🤖 Generated with Claude Code
Ночная проверка корректности на стенде perf/ (29.10, масштаб 1, D0 без grow) — блокеры из «Передано контроллеру»
Сборки: «до» — вершина 1842
399234a(БД на 0049) сperf/из PR 3 (git checkout ...-perf -- perf/, без коммита); «после» — вершина PR 33e9979d(включает #241782a043и #243fbc3601),alembic upgrade→ 0053. Одни данные (дамп D0).(1) Байт-в-байт прежнего режима до/после 0053 — выполнено
GET
/api/v1/svod/2/{GO,RF}/2026под admin и dfip, по 6 вариантов: без параметров;org_ids=<одна организация>;offset=0&limit=50;org_ids+offset/limit;sort_by=section_code&sort_direction=desc;offset=50&limit=50. sha256 распакованных тел: 24 из 24 совпали (GO все 30 911 911 байт, RF все 47 225 805 байт).Excel (
/export/summary/2/{RF,GO}/2026, admin), значения ячеек через openpyxl: лист данных RF 8600 строк и GO 5620 строк — идентичны; единственная разница — ячейка B5 листаmetadata(время выгрузки), ожидаемо.(2) Сверки — выполнено
analysis/svod2_paging_check.py --scale 1: GO full/compact 5617 строк, RF full/compact 8597 строк — расхождений 0, CHECK_OK.node analysis/svod2_search_oracle.mjs --check --api http://localhost:8000 --username perf_dfip ... --year 2026: CHECK_OK.Замеры фазы 2/3 (скриншоты, O-7, время серверного поиска I-1, масштаб 1) — отдельным комментарием в #243/#245 по готовности.
Файлы:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/1843/(bytes-before, bytes-after с index.json и xlsx, bytes-compare.txt, paging_check.txt, oracle_check.txt; скриптnight/tools/svod2_bytes.py).🤖 Generated with Claude Code
Ночной замер — часть 2 (итог)
Сборки как в части 1: «до» — вершина 1842
399234a(БД 0049,perf/из PR 3), «после» — вершина PR 33e9979d(0053); данные D0 (масштаб 1) и D2 (масштаб 2). Корректность части 1 (байт-в-байт 24/24, Excel, CHECK_OK × 2) — в моём предыдущем комментарии; новое ниже.Корректность
svod2_paging_check.py— full/compact GO и RF, расхождений 0, CHECK_OK;svod2_search_oracle.mjs --check— CHECK_OK.Скорость API (
api_split.py, масштаб 1, мс полное / БД; «до» — инструмент 1842, «после» — инструмент PR 3; две отдельные сессии)s2/split-1843-after, послеgen/ANALYZE): страница GO compact 517 (БД 501), RF 760 (746); facets GO 225, RF 350; прежний режим GO 4425 (Python 1497), RF 6853 (2304). «До» на масштабе 2 для 1843 не снималось.Время серверного поиска (I-1)
Запросы по 5 раз, медиана; полное / БД, мс (
1843/search-timing.txt,s2/search-timing.txt):search_aренд.ms_to_stable, от в��ода «аренд» до стабильного «Найдено N из M», включая debounce, одна процедура на обеих сборках): до 349 / 342 / 352 мс (dfip GO, dfip RF, admin GO), после 788–1315 / 877–1559 / 1151–1159 мс (два прогона) — ×2,3–4,6. Экранное время на масштабе 2 не снималось. Порога на время поиска в design нет.O-7: пустые строки после прыжка (подробнее в #243)
Через ~50 мс после прыжка ползунком в середину или в конец «до» показывает данные, «после» — 17 пустых строк (без текста и без полос-скелетонов, высота 37.00 против 37.44 у settled), текст появляется к следующему опросу (≈ 55 мс на масштабе 1, локально); при «Обновить» на глубине скелетоны (серые полосы) есть и «до», и «после». Решение — за человеком.
Вердикт: корректность — выполнена (блокеры сняты); цели design по серверу (compact/full ≤ 0.40: 0.15 / 0.14; первая страница + facets ≤ 5 %: 1.6 % / 1.0 %; прежний запрос ≤ 1.10×: 1.06 / 1.05) — выполнены. I-1: серверный поиск заметно медленнее экранного «до» — решение за человеком (R-5: правка предиката допустима в 0053 до слияния).
Файлы:
/private/tmp/claude-501/-Users-andrey-epifancev-projects-fomichev-claude/6fa9c75e-eb11-4e5d-98c1-05eb590ab14f/scratchpad/night/1843/(split-, search-timing.txt, explain-),s2/(paging_check.txt, oracle_check.txt, search-timing.txt, split-1843-after).Checkout
From your project repository, check out a new branch and test the changes.