Symptom
e2e/streaming-remount.spec.ts:142 › keeps a completed reply after an interrupted turn and conversation remount intermittently times out (20s) waiting for:
await expect(page.locator('.maka-bubble-streaming')).toContainText('Fake backend waiting', ...)
element(s) not found — but the Playwright error-context snapshot shows the text is rendered (log > paragraph: "Fake backend waiting for the test to stop the Turn."). The answer bubble mounts with phase: 'historical' instead of the live streaming phase, so it never carries the maka-bubble-streaming class even though the sidebar shows the turn as 正在响应 (running).
So the race is in live-turn arming/projection: the new turn's first content lands through the historical transcript path while the Turn is actually live.
Reproduction (local, xvfb-run -a, --workers=1, --repeat-each=6)
| Tree |
Result |
main @ 91624f1 |
1 fail / 6 runs |
feat/4364-runtime-form-interactions @ b65d7ff |
3 fail / 6 runs |
feat/4364-desktop-form-interactions @ e8b22e8 |
1 fail / 3 runs |
The flake exists on plain main; the #4364 stack may raise the rate but does not introduce it.
CI sightings
Related history
The 142 case looks like a cousin of #3177: the bubble loses the live classification on a freshly started Turn in a fresh conversation (the preceding step parks a draft in another session and clicks 新任务). Hypothesis: the first content event for the new Turn arrives before the renderer arms its live-turn projection for that session, so it is absorbed into the historical transcript and never re-classified.
Symptom
e2e/streaming-remount.spec.ts:142 › keeps a completed reply after an interrupted turn and conversation remountintermittently times out (20s) waiting for:element(s) not found— but the Playwright error-context snapshot shows the text is rendered (log > paragraph: "Fake backend waiting for the test to stop the Turn."). The answer bubble mounts withphase: 'historical'instead of the live streaming phase, so it never carries themaka-bubble-streamingclass even though the sidebar shows the turn as 正在响应 (running).So the race is in live-turn arming/projection: the new turn's first content lands through the historical transcript path while the Turn is actually live.
Reproduction (local,
xvfb-run -a,--workers=1,--repeat-each=6)main@ 91624f1feat/4364-runtime-form-interactions@ b65d7fffeat/4364-desktop-form-interactions@ e8b22e8The flake exists on plain
main; the #4364 stack may raise the rate but does not introduce it.CI sightings
skill-draft-lifecycle.spec.ts:110), also draft/remount-timing territorytranscript-scroll.spec.ts:694distance-58 flake (separate, reran green)Related history
The 142 case looks like a cousin of #3177: the bubble loses the live classification on a freshly started Turn in a fresh conversation (the preceding step parks a draft in another session and clicks 新任务). Hypothesis: the first content event for the new Turn arrives before the renderer arms its live-turn projection for that session, so it is absorbed into the historical transcript and never re-classified.