[PIX-13144] fix: устранить недетерминизм server-тестов (agent-live-run/instance-settings routes) #197

Merged
andrei merged 1 commit from agent/fullstack/pix-13144 into master 2026-07-06 02:31:43 +00:00
Owner

Что сделано

Устранена корневая причина рецидива недетерминизма после PIX-13019 (CI runs 17088/17095):

  • agent-live-run-routes.test.ts и instance-settings-routes.test.ts: параллельные vi.importActual() через Promise.all() гонялись с резолвом vi.doMock()-графа модулей — транзитивные импорты роута (например ../services/index.js) иногда резолвились в реальную немоканную реализацию вместо фикстуры из registerModuleMocks(). Вызовы сделаны последовательными.
  • agent-live-run-routes.test.ts: beforeEach переведён с vi.clearAllMocks() на vi.resetAllMocks()clearAllMocks не очищает once-очередь mockResolvedValueOnce/mockRejectedValueOnce, непотреблённое одним тестом значение просачивалось в следующий и производило межтестовые падения в зависимости от порядка.
  • setup-supertest.ts: добавлено закрытие всех ephemeral HTTP-серверов (app.listen(0)), поднятых supertest, в afterEach — раньше они утекали на весь процесс vitest файла.

Зачем

После закрытия PIX-13019 (done 2026-07-04) нестабильность вернулась на разных одиночных route-тестах при идентичном коде. Внешние коллизии (параллельные runs, workdir) исключены отдельным расследованием (PIX-13137) — причина была в самой тестовой сюите.

План тестирования

  • tsc --noEmit — чисто.
  • 8 подряд зелёных прогонов instance-settings-routes.test.ts + agent-live-run-routes.test.ts с vitest --sequence.shuffle (разные seed каждый раз).
  • Широкий прогон всех *routes*.test.ts (69 файлов, 801 тест): 62 файла зелёные, 757 тестов проходят. Оставшиеся 7 файлов падают тем же образом и без этого изменения (на чистом master) — это отдельная pre-existing проблема с projectId-валидацией, не связанная с PIX-13144.

Где могу ошибаться

  • Полный прогон всей server-сюиты (105 файлов, ~15+ минут) не проводился целиком в рамках одного запуска из-за таймаутов инструмента — verification выполнена на целевых файлах и на широкой выборке *routes*.test.ts, которая покрывает тот же паттерн createApp()/vi.importActual(), что и оба упавших в CI теста.
## Что сделано Устранена корневая причина рецидива недетерминизма после PIX-13019 (CI runs 17088/17095): - `agent-live-run-routes.test.ts` и `instance-settings-routes.test.ts`: параллельные `vi.importActual()` через `Promise.all()` гонялись с резолвом `vi.doMock()`-графа модулей — транзитивные импорты роута (например `../services/index.js`) иногда резолвились в реальную немоканную реализацию вместо фикстуры из `registerModuleMocks()`. Вызовы сделаны последовательными. - `agent-live-run-routes.test.ts`: `beforeEach` переведён с `vi.clearAllMocks()` на `vi.resetAllMocks()` — `clearAllMocks` не очищает once-очередь `mockResolvedValueOnce`/`mockRejectedValueOnce`, непотреблённое одним тестом значение просачивалось в следующий и производило межтестовые падения в зависимости от порядка. - `setup-supertest.ts`: добавлено закрытие всех ephemeral HTTP-серверов (`app.listen(0)`), поднятых supertest, в `afterEach` — раньше они утекали на весь процесс vitest файла. ## Зачем После закрытия PIX-13019 (done 2026-07-04) нестабильность вернулась на разных одиночных route-тестах при идентичном коде. Внешние коллизии (параллельные runs, workdir) исключены отдельным расследованием (PIX-13137) — причина была в самой тестовой сюите. ## План тестирования - `tsc --noEmit` — чисто. - 8 подряд зелёных прогонов `instance-settings-routes.test.ts` + `agent-live-run-routes.test.ts` с `vitest --sequence.shuffle` (разные seed каждый раз). - Широкий прогон всех `*routes*.test.ts` (69 файлов, 801 тест): 62 файла зелёные, 757 тестов проходят. Оставшиеся 7 файлов падают тем же образом и без этого изменения (на чистом `master`) — это отдельная pre-existing проблема с `projectId`-валидацией, не связанная с PIX-13144. ## Где могу ошибаться - Полный прогон всей server-сюиты (105 файлов, ~15+ минут) не проводился целиком в рамках одного запуска из-за таймаутов инструмента — verification выполнена на целевых файлах и на широкой выборке `*routes*.test.ts`, которая покрывает тот же паттерн `createApp()`/`vi.importActual()`, что и оба упавших в CI теста.
fix(test): устранить недетерминизм в agent-live-run-routes и instance-settings-routes (PIX-13144)
All checks were successful
security/pr-scan No security concerns detected
PR Quality Gates / PR Quality Gates (pull_request_target) Successful in 4s
Agents CI / Typecheck and Build (pull_request) Successful in 6m45s
Agents CI / API Tests (pull_request) Successful in 16m17s
24513fb353
Корневая причина рецидива после PIX-13019: параллельные vi.importActual()
вызовы через Promise.all() гонялись с vi.doMock()-резолвом графа модулей —
транзитивные импорты роута (например ../services/index.js) иногда
резолвились в реальную немоканную реализацию вместо фикстуры из
registerModuleMocks(). В instance-settings это давало `db.select is not a
function` на стаб {} db; в agent-live-run — падение assertion на другом
route-тесте. Оба вызова сделаны последовательными.

Дополнительно agent-live-run-routes.test.ts переведён с
vi.clearAllMocks() на vi.resetAllMocks() в beforeEach: clearAllMocks не
трогает once-очередь mockResolvedValueOnce/mockRejectedValueOnce, и
непотреблённое одним тестом значение просачивалось в следующий,
провоцируя межтестовые падения в зависимости от порядка выполнения.

setup-supertest.ts теперь закрывает все ephemeral HTTP-серверы,
поднятые через app.listen(0) в supertest, в afterEach — раньше они
утекали на весь процесс vitest для файла.

Проверено: 8 подряд зелёных прогонов обеих сюит с
`vitest --sequence.shuffle` (разные seed) + широкий прогон всех
*routes*.test.ts (69 файлов) — 62 файла зелёные, те же 7 файлов падают
и без этого изменения (projectId-валидация, не связано с PIX-13144).
tsc --noEmit чист.
andrei merged commit 8ad9b76783 into master 2026-07-06 02:31:43 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europa-tech-agents!197
No description provided.