krona-staff/tests/e2e/evidence
grok 3388b90bfa test(e2e): N13 — нагрузочная проверка гонки первого расчёта зарплаты
Зачем: владелец пометил N13 как «не воспроизведено», а в коде окно гонки
(SELECT ... FOR UPDATE по отсутствующей строке, затем INSERT ... ON CONFLICT
DO NOTHING со своим runId) видно. Нужен повторяемый замер на живом сервере
и реальной PostgreSQL 17, а не рассуждение.

Что: scripts/test/n13-race.mjs — 10/25/50 параллельных первых
POST /payroll/calculate, каждая попытка на новой точке, проверка статусов,
числа run_id, строк в staff_payroll_runs и «фантомных» run_id. Режим as-is
показывает, что сейчас всё упирается в N2 (500). Режим n2-bypass ставит
DEFAULT now() только в одноразовой БД скрипта (продукт и миграции не
меняются), чтобы увидеть саму гонку. Итог: 0 некорректных из 30 попыток;
причина (из кода) — случайная сериализация через upsert
ensureDefaultPayRules. Это записано в NOTES-FOR-EXECUTORS вместе с
рекомендацией явной блокировки и замечанием об утечке текста ошибок БД в 500.
2026-09-26 14:33:11 +07:00
..
n5-after.txt test(db): стенд PostgreSQL с мигратором без SUPERUSER 2026-09-26 14:21:47 +07:00
n5-before.txt test(db): стенд PostgreSQL с мигратором без SUPERUSER 2026-09-26 14:21:47 +07:00
n13-race.txt test(e2e): N13 — нагрузочная проверка гонки первого расчёта зарплаты 2026-09-26 14:33:11 +07:00
server-n13-as-is.txt test(e2e): N13 — нагрузочная проверка гонки первого расчёта зарплаты 2026-09-26 14:33:11 +07:00
server-n13-n2-bypass.txt test(e2e): N13 — нагрузочная проверка гонки первого расчёта зарплаты 2026-09-26 14:33:11 +07:00