Фикстура свода 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>
Цикл замера вынесен в 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>
Добавлены 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>
Две фазы: 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>
Порог: свод 2 GO −30 %, лист FORM_2/AHR −10 % и меньший размер; пороги
не условие мержа, корректность (сравнение exact/strip-nulls) — жёсткое.
Решения контроллера: план в две фазы, ветка B стеком на A, archive после
merge B, база сравнения, замеры контроллером, pytest на PG16.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Тяжёлые GET листов, сводов и отчётов проектов: готовый JSON из Postgres
без pydantic-модели на строку (PR A) и без null-полей в data листа и
сводов с правкой фронта (PR B). Требования — sheet-read-api и
realtime-sheet-updates; дизайн, риски, тесты и сценарий замера — design.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AURORA-1845. process() больше не читает user_service.get / bf_service.get на
каждое сообщение: результат кэшируется в ConnectionCache (TTL 30 с, только
положительные результаты).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
asyncpg не принимает aware-datetime для CAST AS TIMESTAMP WITHOUT TIME ZONE (400).
Даты переводятся в пояс оргединицы и становятся naive, SQL приписывает тот же offset.
timezone_from_offset вынесен в src/core/timezones.py, добавлен to_org_local_naive.
Aware-дата при NULL utc_offset оргединицы даёт 422.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SQLAlchemy не объявляет greenlet без extra asyncio. На arm64 (macOS)
и на Python >= 3.13 greenlet не ставится, и async-движок падает с
"the greenlet library is required". Тест фиксирует наличие greenlet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
UserInDB наследует новую UserReadBase (email/username/full_name без
валидации формата). Вход (UserBase/UserCreate/UserUpdate) не менялся.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Копируются только строки на пути к затронутой, остальные сохраняют идентичность;
без изменений возвращается тот же data. Отсутствующие в row.data ключи теперь
вставляются (нужно для AURORA-1844/1848). Тесты с паритетом к прежней реализации.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Высота строки и ячейки задана явно в rem, виртуализатор не читает offsetHeight.
Мёртвая muiTableRowProps удалена. Overscan строк свода 2: 8 -> 3.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
На PostgreSQL 15 подзапрос в FROM без алиаса не принимается, миграция
падала. Добавлен алиас active_reports, смысл не меняется. Правка старой
миграции: 0012 выполняется раньше любой новой, на базах, где 0012 уже
применена, ничего не меняет.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Модалки в DictVspModals (forwardRef), таблица в memo со стабильными колбэками,
enableRowVirtualization, size/minSize/maxSize колонок выверены под grid-раскладку.
Co-Authored-By: Claude Opus 5.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>