Листы Операц/АХР/КВ формы «Смета РФ» (FORM_2) выгружались раскладкой формы 1
(FORM1_DEPTH_COLUMNS, 180 колонок формы 1) — из 163 колонок экрана совпадали
по ключу только 83, 97 колонок выгрузки были всегда пустыми (блоки формы 1,
которых нет в данных формы 2), заголовки групп — от формы 1. Также на экране
был лишний столбец «Адрес ВСП», которого нет в исходной форме РФ, и ВСП
выгружался бы числовым id вместо номера, который виден на экране.
- FORM2_DEPTH_COLUMNS/FORM2_COLORS (export_mappings.py) — сгенерированы из
web/src/.../FORM_2/{OPER,AHR,CAP}.js (колонки идентичны у всех трёх листов,
проверено программно; различаются только цвета). 162 листа дерева —
байт-в-байт тот же порядок, что на экране, минус header.vsp_address.
Каждая группа — чисто визуальная обёртка ("key": None), каждый лист несёт
полный путь данных как "key" (например "booking.y2027.q1"), поэтому порядок
вложенности групп для Excel-заголовков не завязан на реальный путь к данным.
- Form2DepthRowNormalizer (export_normalizers.py) — в отличие от
Form1DepthRowNormalizer, не поднимает header.* на верхний уровень: FORM_2
ожидает их как header.section_code, header.vsp_id и т.д.
- _create_xlsxwriter_sheet_writers: отдельная ветка для FormTypeEnum.FORM_2
(раньше FORM_2 попадала в общий else вместе с FORM_1). Сателлиты АХР
(AHR_RENT/UTILITY/SECURITY, AURORA-1904) и STRUCTURE не трогал.
- VSPRepository.get_reg_numbers_by_ids + ExportService._resolve_form2_vsp_numbers:
один запрос резолвит все встретившиеся header.vsp_id (включая закрытые ВСП)
в registration_number перед записью в Excel, как уже показывает экран.
- web/.../FORM_2/{OPER,AHR,CAP}.js: убран столбец «Адрес ВСП» (E1) и его цвет —
по умолчанию, т.к. его нет в исходной форме РФ (см. Rulings в PR). Убрана
мёртвая ссылка на него в Stages/constants.js.
Issue: #252 (AURORA-1902, эпик AURORA-1876, Высокий приоритет)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- 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>
- 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>
perf/REPORT.md: резюме и ответы на жалобы заказчика, методика и окружение,
таблица 13 мест (file:line, доказательство, влияние, приоритет, подтверждено
замером), подробности, статический разбор без замера, что не проверено.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
- 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>
- 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>
perfkit.gen.grow доращивает FORM_2 AHR_UTILITY/AHR_SECURITY до 500 и
FORM_4 CAP до 300 строк; у форм-модалок варианты @big.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
no_overflow вместо пустого complete, узкий catch по строкам, таймаут свода 2,
подписка на мутации до ввода фильтра и проверка эффекта фильтра, traced=1.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>