cf60ebbdfd264c3fc067b9e3230df8752c50d2ec
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
eb1b14b952 |
test(desktop-e2e): fix spec drift accrued while the lane was disabled
The Desktop E2E lane was disabled Aug 2 – Sep 1; the app and gateway kept moving, so 16 specs rotted against current main. All failures traced to spec/harness drift, not product regressions: - fixtures.ts: title generation now rides the main model (#83636), firing a background completion at the mock after every turn — it contains the whole conversation (trigger keywords included), advancing scripted-turn indices and tripping hold-for-prompt matchers. Disabled by default in the mock provider config; specs supplying their own `auxiliary:` section own it. - chat/interim-messages/session-compression/correction-session-switch/ hidden-history-messages: busy-state and transcript assertions updated to the current composer aria-labels, interim-message semantics, and verify-on-stop continuation behavior on main. - bot-mode-closed-chat-stays-closed/group-to-local-bot-handoff: Bot Chat tab selectors updated for the Bot Mode rework (tabs keyed by connection+profile, renamed tab triggers). - glyph-spinner: assertions made compositor-honest for the CI runner (steps() keyframes + layer promotion probed via the animation registry instead of GPU-dependent screenshots). - sidebar-states/tile-unread-bug: event-driven waits with mock-server release handles replace wall-clock polls that lost races on loaded runners. - warm-resume-jitter/image-attachment-resume: real-session-builder harness waits for the thread viewport before evaluating; failure path now dumps per-surface pane state. Local full-suite run on the CI-equivalent xvfb setup: 62 passed, 11 skipped, 1 flaky-passed (correction-session-switch live-correction spec, passes on retry). No product code changed. |
||
|
|
68abf0b33d |
test(desktop): add E2E coverage for session lifecycle (#69580)
* test(desktop): e2e test for interim assistant message preservation (#65919) Adds a Playwright E2E test that reproduces the fix from PR #65919 across all three layers (agent core → tui_gateway → desktop renderer). The mock inference server is upgraded with a multi-turn scripted response that exercises several interleaved patterns: 1. text + tool_call → should produce an interim message 2. text + tool_call → another interim message 3. no text + tool_call → NO interim (no visible text alongside tools) 4. text + tool_call → another interim message 5. final answer (stop) → message.complete, different from all interims Two describe blocks exercise display.interim_assistant_messages both on (default) and off: - ON: all interim texts + the final answer visible in the transcript - OFF: only the final answer visible, all interim texts wiped Also fixes a footgun: test:e2e now runs `npm run build` as a pretest hook so the renderer dist/ is always fresh. Previously, running `npx playwright test` locally would silently load a stale dist/ that predated renderer fixes — the python backend ran from source (had the fix) but the renderer was frozen in an old bundle. CI already built fresh, so the explicit build step there is removed to avoid duplication. * test(desktop): e2e sidebar states — background dot, subagent, cross-session Add sidebar-states.spec.ts with three E2E tests exercising the desktop sidebar's session dot states driven by real gateway events: 1. Background process dot appears during a terminal(background=true) call and disappears after auto-dismiss; subagent (delegate_task) runs concurrently; final answer is visible in the transcript. 2. Background dot remains visible while a subagent runs concurrently (longer sleep 5 background process so the dot is catchable). 3. Cross-session dot transition: start a turn with a background process, wait for the turn to complete, open a new session, then verify the original session's dot transitions from 'background running' to 'finished — unread' when the background process exits. The mock server gains SIDEBAR_SCRIPT and SIDEBAR_CROSS_SCRIPT trigger keywords that return tool_calls for terminal(background=true) and delegate_task — the agent executes these for real (real background process, real subagent), so the tests assert against genuine gateway events rather than mocked UI state. Verified: 3 passed (1.2m) under cage headless wlroots. * test(desktop): e2e tests for tile-unread bug (tab passes, split fails) Two scenarios for the tile-unread bug where a session that finishes while visible on-screen gets the green 'finished unread' dot even though the user is looking right at it. The unread check in handleTransition (session-states.ts:174) only compares against $selectedStoredSessionId and ignores $sessionTiles, so a session visible in a tile gets marked unread even though it's on screen. 1. TAB (hidden, PASSES): ⌃-click opens the session as a stacked tab that is NOT visible on screen. The unread dot IS correct here — the user isn't looking at it. 2. SPLIT (visible, FAILS): drag the session row to the workspace's right edge to create a side-by-side split tile. Both sessions are visible on screen. The unread dot is WRONG — the session is visible in the split tile, so it should not be marked 'unread'. This test is RED until the fix lands. Also adds explicit page.screenshot() calls at key assertion points in sidebar-states.spec.ts so the trace viewer has full-res captures of the sidebar dot states during the test. * test(desktop): cover compression and queued stop lifecycle Add real desktop E2E coverage for session compression continuation and queue parking after an explicit Stop. Extend the mock server with a blocking scripted turn and submitted-prompt assertions. * test(desktop): cover busy composer submit routing Replace the invalid queued-stop E2E scenario: plain text redirects a busy turn rather than entering the queue. Add focused submit-routing coverage for plain text, slash commands, attachments, explicit Stop, and idle submission. |