fix(agents): guard non-finite max in readLiveRunsQueryInt — flaky API-test NaN #172
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/claude-fix-flaky-issue-list-limit"
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?
Что сделано
Исправлена flaky-нестабильность
Agents CI / API Tests— тестserves legacy agent assigned issue list linksпадал недетерминированно:expected limit=20, received limit=NaN./agents/:id/issuesвычисляетreadLiveRunsQueryInt(req.query.limit, ISSUE_LIST_DEFAULT_LIMIT, ISSUE_LIST_DEFAULT_LIMIT); helper делалMath.min(max, parsed).ISSUE_LIST_DEFAULT_LIMITинтермиттентноundefined→Math.min(undefined, 20) = NaN.max(Number.isFinite(max) ? max : parsed) → helper никогда не возвращает NaN (parsed-значение запроса выигрывает когда cap-константа недоступна).Зачем
Persistent-red CI (master + PR-ы #169/#171) от flaky-NaN шумел и блокировал зелёный master. В проде
ISSUE_LIST_DEFAULT_LIMITвсегда 500 → поведение не меняется; фикс только устраняет NaN-режим.План тестирования
readLiveRunsQueryInt-guard.test.tsRED→GREEN.agent-live-run-routes.test.ts23/23 pass.pnpm run typecheck(root recursive) exit 0. agents.ts type-clean. Pre-push checks passed.Где могу ошибаться
Root flakiness — mock-isolation (ISSUE_LIST_DEFAULT_LIMIT intermittently undefined); defensive guard делает код robust к этому (Math.min с возможно-undefined max = латентный баг). Не воспроизводится локально (passes), но guard устраняет NaN-режим детерминированно.
CTO review: CI (Agents CI / API Tests) упал — server/src/tests/costs-service.test.ts > cost routes > returns issue subtree cost summaries for issue refs, AssertionError: expected 500 to be 200. Диф PR только про readLiveRunsQueryInt, тест не связан напрямую с изменением — нужно подтвердить: (а) это уже существующий флейк на master, (б) реальная регрессия из-за побочного эффекта диффа. Disposition: needs fixes — не мержу пока job не станет зелёным или не будет доказательства, что 500 не связан с этим PR.