Friction (recurring, hit on 3+ PRs this week: #380, #387, #388)
rivet-cli/tests/serve_integration.rs::graph_type_filter_renders_when_under_budget intermittently fails in CI (Test and Proptest-extended jobs) with:
assertion `left == right` failed: /graph?types=requirement must return 200
left: 0
right: 200
Root cause (verified)
The test fetched /graph?types=requirement with the default 5s fetch() read timeout. That endpoint does a BFS + layout over the dogfood corpus (~742 nodes / 1477 edges), which on a loaded CI runner can brush past 5s. fetch_with_timeout parses a timed-out/empty response's status as 0 (.unwrap_or(0)), so the timeout surfaces as status == 0 and fails the == 200 assertion. This is the same chronic flake the focus-graph tests already documented and fixed by moving to a 15s budget (see the comment block above fetch_with_timeout) — this one test was missed.
It always reproduced locally as passing and the failing subsystem (the /graph endpoint) is unrelated to whatever the PR changed, which is the classic "unrelated flake" signature.
Fix
Give this test the same generous 15s budget the other graph endpoints use (it asserts on the response, not a hard latency bound). PR incoming.
Filing for the record since it's bitten several PRs; closing via the fix.
Friction (recurring, hit on 3+ PRs this week: #380, #387, #388)
rivet-cli/tests/serve_integration.rs::graph_type_filter_renders_when_under_budgetintermittently fails in CI (Test and Proptest-extended jobs) with:Root cause (verified)
The test fetched
/graph?types=requirementwith the default 5sfetch()read timeout. That endpoint does a BFS + layout over the dogfood corpus (~742 nodes / 1477 edges), which on a loaded CI runner can brush past 5s.fetch_with_timeoutparses a timed-out/empty response's status as0(.unwrap_or(0)), so the timeout surfaces asstatus == 0and fails the== 200assertion. This is the same chronic flake the focus-graph tests already documented and fixed by moving to a 15s budget (see the comment block abovefetch_with_timeout) — this one test was missed.It always reproduced locally as passing and the failing subsystem (the
/graphendpoint) is unrelated to whatever the PR changed, which is the classic "unrelated flake" signature.Fix
Give this test the same generous 15s budget the other graph endpoints use (it asserts on the response, not a hard latency bound). PR incoming.
Filing for the record since it's bitten several PRs; closing via the fix.