Skip to content

test(e2e): variant-smoke-full flakes on the degraded-digest retry assertion (fixed-wait request count) #5890

Description

@koala73

variant-smoke-full failed on PR #5884 — a PR that touches only server/_shared/llm-sanitize.* and server/worldmonitor/intelligence/v1/chat-analyst-context.ts (both server/edge-only, unreachable from the dashboard bundle) plus two node-test files. It passed on re-run of the identical SHA.

Failing test

e2e/dashboard-news-request-budget.spec.ts:290"a degraded 200 digest with no categories is not mistaken for a landed load" (added by 612bad2, #5376/PR #5878).

Error: a 200 digest carrying no categories leaves every panel empty, so it must stay
retryable exactly like a failed request (attempts: 1)
expect(received).toBeGreaterThanOrEqual(expected)
Expected: >= 2
Received:    1

Failed on the initial attempt and on Playwright's retry #1 — so it looks deterministic within a job, which is what makes it easy to misread as a real regression.

Evidence it is a flake, not a regression

  • Paired local runs, same machine, same environment, only the diff varying: the spec was run at the PR's base content (fix reverted via file copies) and again with the fix restored. 5/5 passed both times, byte-identical results. [run 30562253073 job 90938011607 = fail; re-run job 90940416455 = pass, same SHA]
  • No src/** module imports either changed file, so the change cannot alter the dashboard bundle the spec exercises.
  • CI re-run of the identical commit: pass.

Why it is worth tracking

The assertion counts digest requests after a fixed SECOND_LOAD_SETTLE_MS wait. A settle-time-bounded request count is timing-sensitive, and variant-smoke-full runs three e2e suites sequentially in one job, so this one starts under whatever load the previous two left behind. This job is a required PR gate, so a flake here red-lights unrelated PRs and costs a full investigation each time (this one cost a base-vs-head bisect to clear).

Note the test asserts behavior that #5877 is separately fixing (fix/news-degraded-digest-poisons-last-good) — worth confirming the two interact as intended, i.e. that the assertion is not currently passing for a reason unrelated to the retry path.

Suggested fix

Replace the fixed-wait-then-count with a condition-based wait (poll until a second digest request is observed, with a generous timeout) so the assertion measures the retry behavior rather than whether it happened to land inside a wall-clock window.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions