Skip to content

spec: Add AudioWorklet engine spec for scheduling, LFO, metering, and pitch-shifting #317

spec: Add AudioWorklet engine spec for scheduling, LFO, metering, and pitch-shifting

spec: Add AudioWorklet engine spec for scheduling, LFO, metering, and pitch-shifting #317

Triggered via pull request March 8, 2026 20:28
Status Failure
Total duration 17m 57s
Artifacts

ci.yml

on: pull_request
Fit to window
Zoom out
Zoom in

Annotations

33 errors, 1 warning, and 1 notice
Integration Tests
Cannot find name 'currentTime'.
Integration Tests
Property 'port' does not exist on type 'MeteringWorkletProcessor'.
Integration Tests
Property 'port' does not exist on type 'MeteringWorkletProcessor'.
Integration Tests
Cannot find name 'sampleRate'.
Integration Tests
Cannot find name 'AudioWorkletProcessor'.
Integration Tests
'getServerTime' is declared but its value is never read.
Integration Tests
'isMultiplayerMode' is declared but its value is never read.
Integration Tests
'MidiExportOptions' is declared but never used.
Integration Tests
Duplicate function implementation.
Integration Tests
Duplicate function implementation.
Build
Cannot find name 'currentTime'.
Build
Property 'port' does not exist on type 'MeteringWorkletProcessor'.
Build
Property 'port' does not exist on type 'MeteringWorkletProcessor'.
Build
Cannot find name 'sampleRate'.
Build
Cannot find name 'AudioWorkletProcessor'.
Build
'getServerTime' is declared but its value is never read.
Build
'isMultiplayerMode' is declared but its value is never read.
Build
'MidiExportOptions' is declared but never used.
Build
Duplicate function implementation.
Build
Duplicate function implementation.
Lint
Process completed with exit code 1.
Lint: app/src/utils/dead-code-audit.test.ts#L20
'fileExists' is defined but never used. Allowed unused vars must match /^_/u
Lint: app/src/audio/midiExport.worker.ts#L17
'MidiExportOptions' is defined but never used. Allowed unused vars must match /^_/u
[chromium] › e2e/landscape-alignment.spec.ts:224:3 › Landscape Mobile Alignment › screenshot comparison - visual alignment check: app/e2e/landscape-alignment.spec.ts#L0
3) [chromium] › e2e/landscape-alignment.spec.ts:224:3 › Landscape Mobile Alignment › screenshot comparison - visual alignment check Test timeout of 30000ms exceeded.
[chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment: app/e2e/landscape-alignment.spec.ts#L32
2) [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect.toBeVisible: Target page, context or browser has been closed 30 | // Click the instrument button by name 31 | const sampleBtn = page.getByRole('button', { name: instrumentName }).first(); > 32 | await expect(sampleBtn).toBeVisible({ timeout: 5000 }); | ^ 33 | await sampleBtn.click(); 34 | 35 | // Wait for track row to appear at addTrack (/home/runner/work/keyboardia/keyboardia/app/e2e/landscape-alignment.spec.ts:32:27) at /home/runner/work/keyboardia/keyboardia/app/e2e/landscape-alignment.spec.ts:157:5
[chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment: app/e2e/landscape-alignment.spec.ts#L0
2) [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Test timeout of 30000ms exceeded.
[chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment: app/e2e/landscape-alignment.spec.ts#L32
2) [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect.toBeVisible: Target page, context or browser has been closed 30 | // Click the instrument button by name 31 | const sampleBtn = page.getByRole('button', { name: instrumentName }).first(); > 32 | await expect(sampleBtn).toBeVisible({ timeout: 5000 }); | ^ 33 | await sampleBtn.click(); 34 | 35 | // Wait for track row to appear at addTrack (/home/runner/work/keyboardia/keyboardia/app/e2e/landscape-alignment.spec.ts:32:27) at /home/runner/work/keyboardia/keyboardia/app/e2e/landscape-alignment.spec.ts:157:5
[chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment: app/e2e/landscape-alignment.spec.ts#L0
2) [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Test timeout of 30000ms exceeded.
[chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment: app/e2e/landscape-alignment.spec.ts#L32
2) [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment Error: expect.toBeVisible: Target page, context or browser has been closed 30 | // Click the instrument button by name 31 | const sampleBtn = page.getByRole('button', { name: instrumentName }).first(); > 32 | await expect(sampleBtn).toBeVisible({ timeout: 5000 }); | ^ 33 | await sampleBtn.click(); 34 | 35 | // Wait for track row to appear at addTrack (/home/runner/work/keyboardia/keyboardia/app/e2e/landscape-alignment.spec.ts:32:27) at /home/runner/work/keyboardia/keyboardia/app/e2e/landscape-alignment.spec.ts:157:5
[chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment: app/e2e/landscape-alignment.spec.ts#L0
2) [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment Test timeout of 30000ms exceeded.
[chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default: app/e2e/feature-flags.spec.ts#L54
1) [chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default Retry #2 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toHaveCount(expected) failed Locator: locator('.loop-ruler') Expected: 0 Received: 1 Timeout: 5000ms Call log: - Expect "toHaveCount" with timeout 5000ms - waiting for locator('.loop-ruler') 9 × locator resolved to 1 element - unexpected value "1" 52 | // Loop ruler should not be rendered when feature flag is off (default) 53 | const loopRuler = page.locator('.loop-ruler'); > 54 | await expect(loopRuler).toHaveCount(0); | ^ 55 | }); 56 | 57 | test('loop handles are NOT visible by default', async ({ page }) => { at /home/runner/work/keyboardia/keyboardia/app/e2e/feature-flags.spec.ts:54:31
[chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default: app/e2e/feature-flags.spec.ts#L54
1) [chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default Retry #1 ─────────────────────────────────────────────────────────────────────────────────────── Error: expect(locator).toHaveCount(expected) failed Locator: locator('.loop-ruler') Expected: 0 Received: 1 Timeout: 5000ms Call log: - Expect "toHaveCount" with timeout 5000ms - waiting for locator('.loop-ruler') 9 × locator resolved to 1 element - unexpected value "1" 52 | // Loop ruler should not be rendered when feature flag is off (default) 53 | const loopRuler = page.locator('.loop-ruler'); > 54 | await expect(loopRuler).toHaveCount(0); | ^ 55 | }); 56 | 57 | test('loop handles are NOT visible by default', async ({ page }) => { at /home/runner/work/keyboardia/keyboardia/app/e2e/feature-flags.spec.ts:54:31
[chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default: app/e2e/feature-flags.spec.ts#L54
1) [chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default Error: expect(locator).toHaveCount(expected) failed Locator: locator('.loop-ruler') Expected: 0 Received: 1 Timeout: 5000ms Call log: - Expect "toHaveCount" with timeout 5000ms - waiting for locator('.loop-ruler') 9 × locator resolved to 1 element - unexpected value "1" 52 | // Loop ruler should not be rendered when feature flag is off (default) 53 | const loopRuler = page.locator('.loop-ruler'); > 54 | await expect(loopRuler).toHaveCount(0); | ^ 55 | }); 56 | 57 | test('loop handles are NOT visible by default', async ({ page }) => { at /home/runner/work/keyboardia/keyboardia/app/e2e/feature-flags.spec.ts:54:31
Lint: app/src/components/CursorOverlay.tsx#L27
React Hook useMemo has an unnecessary dependency: 'deferredCursors'. Either exclude it or remove the dependency array
🎭 Playwright Run Summary
79 failed [chromium] › e2e/feature-flags.spec.ts:51:5 › Feature Flags › Loop Ruler (default: OFF) › loop ruler is NOT visible by default [chromium] › e2e/landscape-alignment.spec.ts:154:3 › Landscape Mobile Alignment › all track rows should have consistent vertical alignment [chromium] › e2e/landscape-alignment.spec.ts:224:3 › Landscape Mobile Alignment › screenshot comparison - visual alignment check [chromium] › e2e/pitch-contour-alignment.spec.ts:35:3 › PitchContour alignment › CSS dimensions match JavaScript constants (CRITICAL regression test) [chromium] › e2e/pitch-contour-alignment.spec.ts:100:3 › PitchContour alignment › SVG contour dots align with step cells for session with pitch variation [chromium] › e2e/scrollbar.spec.ts:76:3 › Scrollbar behavior › should have a single scrollbar for the entire tracks panel, not per track [chromium] › e2e/scrollbar.spec.ts:112:3 › Scrollbar behavior › all tracks should scroll together horizontally when scrolling the panel [chromium] › e2e/scrollbar.spec.ts:193:3 › Scrollbar behavior › pattern tools panel should stay visible when scrolling horizontally [chromium] › e2e/scrollbar.spec.ts:274:3 › Scrollbar behavior › step columns should align vertically across all tracks [chromium] › e2e/track-reorder-bug-fixes.spec.ts:114: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:122:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder first track to last position [chromium] › e2e/track-reorder-comprehensive.spec.ts:137:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder last track to first position [chromium] › e2e/track-reorder-comprehensive.spec.ts:151:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder middle track up [chromium] › e2e/track-reorder-comprehensive.spec.ts:163:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should reorder middle track down [chromium] › e2e/track-reorder-comprehensive.spec.ts:175:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should swap adjacent tracks (down) [chromium] › e2e/track-reorder-comprehensive.spec.ts:188:5 › Track Reorder - Comprehensive Edge Cases › Basic Reorder Operations › should swap adjacent tracks (up) [chromium] › e2e/track-reorder-comprehensive.spec.ts:207: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:219: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:246:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should handle two quick consecutive reorders correctly [chromium] › e2e/track-reorder-comprehensive.spec.ts:262:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should handle three rapid reorders without losing state [chromium] › e2e/track-reorder-comprehensive.spec.ts:282:5 › Track Reorder - Comprehensive Edge Cases › Rapid Consecutive Drags › should maintain track count after many rapid operations [chromium] › e2e/track-reorder-comprehensive.spec.ts:296: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:317: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:346:5 › Track Reorder -