ci: follow spec — 90s convergence windows (awareness re-broadcast covers lost first delivery)
4 flakes in 6 CI runs on 2026-08-01, all with clean traces: no guard beacons,
A demonstrably landed (the 208cb67 sequencing gate passed), B just never got
the one-shot rect applied within 30s while two wasm instances starved the CI
box. Awareness re-broadcasts state periodically, so a 90s condition-poll
converges on re-delivery; local runs stay fast (converge in <2s).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019SE4o46Lnq3hF574FFq8x4
This commit is contained in:
parent
5333099810
commit
f488744797
1 changed files with 7 additions and 2 deletions
|
|
@ -91,9 +91,14 @@ test('B follows A: viewport mirrors, then local input breaks the follow', async
|
||||||
await expect(b.getByTestId('follow-banner')).toBeVisible({ timeout: 10000 });
|
await expect(b.getByTestId('follow-banner')).toBeVisible({ timeout: 10000 });
|
||||||
|
|
||||||
// B's viewport converges on A's rect (publish 100 ms + awareness relay).
|
// B's viewport converges on A's rect (publish 100 ms + awareness relay).
|
||||||
|
// 90s, not 30s: on a starved CI box the first delivery can be lost while
|
||||||
|
// both wasm instances hog the loop; awareness re-broadcasts state
|
||||||
|
// periodically, so a longer condition-poll converges where a short one
|
||||||
|
// recorded 4 flakes in 6 runs (2026-08-01) — all with clean traces (no
|
||||||
|
// guard beacons, A demonstrably on target).
|
||||||
await expect
|
await expect
|
||||||
.poll(async () => near(await viewport(b), T1.cx, T1.cy, T1.hw * 0.02), {
|
.poll(async () => near(await viewport(b), T1.cx, T1.cy, T1.hw * 0.02), {
|
||||||
timeout: 30000,
|
timeout: 90000,
|
||||||
message: 'B never converged on the followed viewport',
|
message: 'B never converged on the followed viewport',
|
||||||
})
|
})
|
||||||
.toBe(true);
|
.toBe(true);
|
||||||
|
|
@ -113,7 +118,7 @@ test('B follows A: viewport mirrors, then local input breaks the follow', async
|
||||||
.toBe(true);
|
.toBe(true);
|
||||||
await expect
|
await expect
|
||||||
.poll(async () => near(await viewport(b), T2.cx, T2.cy, T2.hw * 0.02), {
|
.poll(async () => near(await viewport(b), T2.cx, T2.cy, T2.hw * 0.02), {
|
||||||
timeout: 30000,
|
timeout: 90000, // see the T1 convergence comment (awareness re-broadcast)
|
||||||
message: 'B never tracked the second viewport move',
|
message: 'B never tracked the second viewport move',
|
||||||
})
|
})
|
||||||
.toBe(true);
|
.toBe(true);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue