Skip to content

feat: Implement Observability 2.0 wide events #261

feat: Implement Observability 2.0 wide events

feat: Implement Observability 2.0 wide events #261

Triggered via pull request January 15, 2026 19:20
Status Success
Total duration 18m 9s
Artifacts

ci.yml

on: pull_request
Fit to window
Zoom out
Zoom in

Annotations

10 errors and 1 notice
[chromium] › e2e/scrollbar.spec.ts:100:3 › Scrollbar behavior › all tracks should scroll together horizontally when scrolling the panel: app/e2e/scrollbar.spec.ts#L62
4) [chromium] › e2e/scrollbar.spec.ts:100:3 › Scrollbar behavior › all tracks should scroll together horizontally when scrolling the panel Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 60 | await expect(page.locator('[data-testid="grid"]')).toBeVisible({ timeout: 10000 }); 61 | // Wait for WebSocket connection to ensure state is fully synced > 62 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 63 | await expect(page.locator('.track-row').first()).toBeVisible({ timeout: 5000 }); 64 | }); 65 | at /home/runner/work/keyboardia/keyboardia/app/e2e/scrollbar.spec.ts:62:65
[chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel: app/e2e/scrollbar.spec.ts#L62
3) [chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel, not per track Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 60 | await expect(page.locator('[data-testid="grid"]')).toBeVisible({ timeout: 10000 }); 61 | // Wait for WebSocket connection to ensure state is fully synced > 62 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 63 | await expect(page.locator('.track-row').first()).toBeVisible({ timeout: 5000 }); 64 | }); 65 | at /home/runner/work/keyboardia/keyboardia/app/e2e/scrollbar.spec.ts:62:65
[chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel: app/e2e/scrollbar.spec.ts#L62
3) [chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel, not per track Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 60 | await expect(page.locator('[data-testid="grid"]')).toBeVisible({ timeout: 10000 }); 61 | // Wait for WebSocket connection to ensure state is fully synced > 62 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 63 | await expect(page.locator('.track-row').first()).toBeVisible({ timeout: 5000 }); 64 | }); 65 | at /home/runner/work/keyboardia/keyboardia/app/e2e/scrollbar.spec.ts:62:65
[chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel: app/e2e/scrollbar.spec.ts#L62
3) [chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel, not per track Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 60 | await expect(page.locator('[data-testid="grid"]')).toBeVisible({ timeout: 10000 }); 61 | // Wait for WebSocket connection to ensure state is fully synced > 62 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 63 | await expect(page.locator('.track-row').first()).toBeVisible({ timeout: 5000 }); 64 | }); 65 | at /home/runner/work/keyboardia/keyboardia/app/e2e/scrollbar.spec.ts:62:65
[chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation: app/e2e/pitch-contour-alignment.spec.ts#L150
2) [chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 148 | 149 | // Wait for WebSocket connection to ensure state is fully synced > 150 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 151 | 152 | // Wait for track row to appear 153 | await expect(page.locator('.track-row')).toBeVisible({ timeout: 10000 }); at /home/runner/work/keyboardia/keyboardia/app/e2e/pitch-contour-alignment.spec.ts:150:65
[chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation: app/e2e/pitch-contour-alignment.spec.ts#L150
2) [chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 148 | 149 | // Wait for WebSocket connection to ensure state is fully synced > 150 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 151 | 152 | // Wait for track row to appear 153 | await expect(page.locator('.track-row')).toBeVisible({ timeout: 10000 }); at /home/runner/work/keyboardia/keyboardia/app/e2e/pitch-contour-alignment.spec.ts:150:65
[chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation: app/e2e/pitch-contour-alignment.spec.ts#L150
2) [chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 148 | 149 | // Wait for WebSocket connection to ensure state is fully synced > 150 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 151 | 152 | // Wait for track row to appear 153 | await expect(page.locator('.track-row')).toBeVisible({ timeout: 10000 }); at /home/runner/work/keyboardia/keyboardia/app/e2e/pitch-contour-alignment.spec.ts:150:65
[chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test): app/e2e/pitch-contour-alignment.spec.ts#L51
1) [chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test) Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 49 | 50 | // Wait for WebSocket connection before adding tracks > 51 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 52 | 53 | // Add a track to get step cells (button has star prefix like "★ 808 Kick") 54 | const addTrackButton = page.getByRole('button', { name: /808 Kick/i }); at /home/runner/work/keyboardia/keyboardia/app/e2e/pitch-contour-alignment.spec.ts:51:65
[chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test): app/e2e/pitch-contour-alignment.spec.ts#L51
1) [chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test) Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 49 | 50 | // Wait for WebSocket connection before adding tracks > 51 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 52 | 53 | // Add a track to get step cells (button has star prefix like "★ 808 Kick") 54 | const addTrackButton = page.getByRole('button', { name: /808 Kick/i }); at /home/runner/work/keyboardia/keyboardia/app/e2e/pitch-contour-alignment.spec.ts:51:65
[chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test): app/e2e/pitch-contour-alignment.spec.ts#L51
1) [chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test) Error: expect(locator).toBeVisible() failed Locator: locator('.connection-status--connected') Expected: visible Timeout: 10000ms Error: element(s) not found Call log: - Expect "toBeVisible" with timeout 10000ms - waiting for locator('.connection-status--connected') 49 | 50 | // Wait for WebSocket connection before adding tracks > 51 | await expect(page.locator('.connection-status--connected')).toBeVisible({ timeout: 10000 }); | ^ 52 | 53 | // Add a track to get step cells (button has star prefix like "★ 808 Kick") 54 | const addTrackButton = page.getByRole('button', { name: /808 Kick/i }); at /home/runner/work/keyboardia/keyboardia/app/e2e/pitch-contour-alignment.spec.ts:51:65
🎭 Playwright Run Summary
75 failed [chromium] › e2e/pitch-contour-alignment.spec.ts:34:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test) [chromium] › e2e/pitch-contour-alignment.spec.ts:99:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation [chromium] › e2e/scrollbar.spec.ts:66:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel, not per track [chromium] › e2e/scrollbar.spec.ts:100:3 › Scrollbar behavior › all tracks should scroll together horizontally when scrolling the panel [chromium] › e2e/scrollbar.spec.ts:181:3 › Scrollbar behavior › step columns should align vertically across all tracks [chromium] › e2e/track-reorder-bug-fixes.spec.ts:97:5 › Track Reorder Bug Fix Verification › BUG 1: Double handleDragEnd Prevention › should only reorder once per drag operation [chromium] › e2e/track-reorder-comprehensive.spec.ts:105:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder first track to last position [chromium] › e2e/track-reorder-comprehensive.spec.ts:120:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder last track to first position [chromium] › e2e/track-reorder-comprehensive.spec.ts:134:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder middle track up [chromium] › e2e/track-reorder-comprehensive.spec.ts:146:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder middle track down [chromium] › e2e/track-reorder-comprehensive.spec.ts:158:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should swap adjacent tracks (down) [chromium] › e2e/track-reorder-comprehensive.spec.ts:171:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should swap adjacent tracks (up) [chromium] › e2e/track-reorder-comprehensive.spec.ts:190:5 › Track Reorder - Comprehensive Edge Cases › Same Position Edge Cases › should NOT reorder when dragging to same position [chromium] › e2e/track-reorder-comprehensive.spec.ts:202:5 › Track Reorder - Comprehensive Edge Cases › Same Position Edge Cases › should NOT reorder when drag is released on same track [chromium] › e2e/track-reorder-comprehensive.spec.ts:229:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should handle two quick consecutive reorders correctly [chromium] › e2e/track-reorder-comprehensive.spec.ts:245:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should handle three rapid reorders without losing state [chromium] › e2e/track-reorder-comprehensive.spec.ts:265:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should maintain track count after many rapid operations [chromium] › e2e/track-reorder-comprehensive.spec.ts:279:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should not duplicate tracks during rapid back-and-forth drags [chromium] › e2e/track-reorder-comprehensive.spec.ts:300:5 › Track Reorder - Comprehensive Edge Cases › Cancel Drag Operations › should NOT reorder when drag is canceled by moving cursor away [chromium] › e2e/track-reorder-comprehensive.spec.ts:329:5 › Track Reorder - Comprehensive Edge Cases › Cancel Drag Operations › should NOT reorder when mouse is released without proper drop [chromium] › e2e/track-reorder-comprehensive.spec.ts:348:5 › Track Reorder - Comprehensive Edge Cases › Cancel Drag Operations › should clear drag state after cancel [chromium] › e2e/track-reorder-comprehensive.spec.ts:377:5 › Track Reorder - Comprehensive Edge Cases › State Consistency › should persist track order after multiple operations [chromium] › e2e/track-reorder-comprehensive.spec.ts:399:5 › Track Reorder - Co