-
Notifications
You must be signed in to change notification settings - Fork 0
Add end-to-end tests that boot the real desktop app #188
Copy link
Copy link
Open
Labels
area/ciCI pipeline, GitHub Actions, workflowsCI pipeline, GitHub Actions, workflowsarea/frontendTouches apps/desktop frontend (React/Vite/Tailwind/ESLint)Touches apps/desktop frontend (React/Vite/Tailwind/ESLint)priority/highHigh-priority work — block other features until this landsHigh-priority work — block other features until this landsstatus/needs-researchDeep multi-source research required before committing to an approachDeep multi-source research required before committing to an approachtype/choreRoutine maintenance / repo hygieneRoutine maintenance / repo hygiene
Description
Activity
Metadata
Metadata
Assignees
Labels
area/ciCI pipeline, GitHub Actions, workflowsCI pipeline, GitHub Actions, workflowsarea/frontendTouches apps/desktop frontend (React/Vite/Tailwind/ESLint)Touches apps/desktop frontend (React/Vite/Tailwind/ESLint)priority/highHigh-priority work — block other features until this landsHigh-priority work — block other features until this landsstatus/needs-researchDeep multi-source research required before committing to an approachDeep multi-source research required before committing to an approachtype/choreRoutine maintenance / repo hygieneRoutine maintenance / repo hygiene
Problem
Four runtime-only defects reached a working build in a single session, none of which any existing gate could catch:
set_provider_keysentapi_keyinstead ofapiKeycancel_transcriptionsentrequest_uuidinstead ofrequestUuidtranscribesentfile_uuid/file_name/language_hintbuild_containerThe first three are one bug class (Tauri exposes snake_case Rust params to JS as camelCase unless
rename_allopts out) and are now closed by a static cross-check — seeapps/desktop/src/__tests__/ipc-contract.test.ts, which derives the command list fromlib.rs'sinvoke_handlerand fails on its own parser blind spots.The fourth is not catchable that way, and neither is anything else that depends on a booted app.
Why the existing gates can't cover this
tsc -b— invoke args are typedRecord<string, unknown>; anything type-checks.just bindings—bindings.tsis tauri-specta's type output only. It emits no command wrappers, so argument names are never inspected.../apiwholesale, so no payload is ever observed.ipc-contract.test.ts— static source cross-check. Catches name mismatches; cannot catch runtime wiring.Uncovered surface
Everything requiring a real process:
build_containerstartup wiring: config + keyring produce a registered, active backend.<app_data_dir>/config.tomlwhile the CLI reads<XDG_CONFIG>/perima/config.toml. GH CLI and desktop write to different SQLite databases on the same machine #154 unified the database path for both shells; config was not included, so the two can silently diverge.which::which) — these are different code paths and only one is exercised today.Proposal
Stand up
tauri-driver+ WebdriverIO against a debug build, covering at minimum:Needs research before committing to an approach. Open questions:
tauri-drivermaturity on Linux (WebKitWebDriver), whether it runs headless on GitHub runners, how to point the app at a stub transcription endpoint without shipping a test-only code path, and whether the cost is justified on the Linux runner only vs the full matrix.Acceptance criteria
tauri-driverproves unworkable, the research outcome is recorded here and a narrower alternative is proposed rather than the issue being closed silently.