Skip to content

QA platform matrix

Purpose of this document: Define the manual and automated test coverage required for a credible all-platform Steam release of Conversation Simulator. This is the QA companion to steam-mvp-scope.md (feature gates) and release-checklist.md (release smoke steps).


PlatformOS versions in scopeArchitectureInstaller formatTier
WindowsWindows 10 (build 19041+), Windows 11x86-64NSIS .exe, MSIRequired
macOS — Apple SiliconmacOS 13 Ventura, macOS 14 Sonoma, macOS 15+arm64.dmgRequired
macOS — IntelmacOS 13 Ventura, macOS 14 Sonomax86-64.dmgRequired
Linux (glibc)Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Fedora 40+x86-64AppImage, .debRequired
Steam Deck / SteamOSSteamOS 3.x (based on Arch Linux)x86-64Flatpak / AppImageRequired for public release

OS versions explicitly out of scope for v1

Section titled “OS versions explicitly out of scope for v1”
  • Windows 8.1 and earlier — no WebView2 support
  • macOS 12 Monterey — dropped from QA matrix; may still work but is untested
  • 32-bit (x86) on any platform
  • ARM Windows — not targeted in v1
  • ChromeOS / Android / iOS — not targeted in v1

TierExample hardwareRAMVRAMExpected NPC first-tokenQA priority
Minimum4-core x86-64 CPU, integrated graphics8 GB0 GB (CPU only)5–15 sMust pass (gate)
Starter6-core CPU, integrated GPU or low-end discrete12 GB2–4 GB2–6 sMust pass
RecommendedApple M2 / NVIDIA RTX 3060, mid-range CPU16 GB4–8 GB0.5–2 sMust pass
High-endApple M3 Pro / NVIDIA RTX 408032 GB+12–24 GB< 0.5 sValidation only
TierRecommended modelNotes
Minimum2–3 B Q4 quantised (≤ 2 GB GGUF)CPU-only; warn if < 8 GB RAM
Starter4 B Q4_K_M (≈ 2.6 GB GGUF)Qwen3 4B reference model
Recommended7–8 B Q4_K_M (≈ 5 GB GGUF)Full GPU offload recommended
High-end13 B+ Q4_K_M or largerEnthusiast / creator use
  • Minimum tier: text-only is the default recommendation; app must surface a visible performance warning when first-token latency exceeds 10 s; STT/TTS disabled by default.
  • Starter tier: app recommends a 4 B model and CPU+GPU split; performance warning at > 5 s.
  • All tiers: a turn that times out after 60 s must produce an in-app error with a recovery action; the session must remain open for retry.
  • Out-of-memory: the app must display a readable error message; it must not crash silently or corrupt the session database.

Steam Deck is a required platform for the Stage 4 public release. Valve must grant Verified (not merely Playable) tier before the public release gate opens.

Input typeExpected behaviour on Steam Deck
D-pad + A/B/X/Y buttonsNavigate menus, confirm / cancel dialogs
Left stickScroll lists; equivalent to mouse scroll
Right trackpadPointer control for precise clicks
On-screen keyboardMust appear automatically when any text field is focused
Back buttons (L4/R4/L5/R5)May be left unmapped in v1; must not break play
GyroUnmapped in v1

Each item must be checked by a tester on physical Steam Deck hardware running SteamOS 3.x in Gaming Mode before G4-02 can be declared PASS.

CheckController-only testResult
App launches in Gaming Mode from the Steam library without extra setup.Use controller to launch from library[ ] PASS / [ ] FAIL
Home, Library, Setup, Conversation, Debrief, Model Manager, Settings, Support, and Workbench are fully navigable with the controller alone.TC-11 full walkthrough[ ] PASS / [ ] FAIL
Every interactive element has a visible focus ring at 1280×800 from couch distance.Inspect each screen during TC-11[ ] PASS / [ ] FAIL
On-screen keyboard appears automatically for every text input field (no manual invocation needed).TC-11.5 and TC-11.7[ ] PASS / [ ] FAIL
R1 (right shoulder) triggers push-to-talk in voice mode.TC-11.6[ ] PASS / [ ] FAIL
All text is readable at 1280×800 (native resolution) without zooming or horizontal scrolling.Inspect transcript, meters, debrief[ ] PASS / [ ] FAIL
No required action is hidden behind a mouse-only hover state.All screens — controller only[ ] PASS / [ ] FAIL
DebugDrawer is excluded from the controller focus ring (dev builds only).TC-11.11[ ] PASS / [ ] N/A
Default Steam Input config (steam/controller_config.vdf) is loaded automatically.Launch game; check Steam Input overlay[ ] PASS / [ ] FAIL
Offline smoke test passes under SteamOS 3.x (no outbound network during play).TC-09 on Steam Deck[ ] PASS / [ ] FAIL
Steam overlay (Shift+Tab) opens and closes without breaking the current session.TC-11.12[ ] PASS / [ ] FAIL
Approximate battery impact documented (see §5 performance thresholds).Observe during TC-11[ ] Documented

Each test case below maps to one or more acceptance gate IDs from steam-mvp-scope.md and/or steps in release-checklist.md. Automated means the case is or should be covered by CI; Manual means it requires a human tester on real hardware.

#StepPass criterionMethod
01.1Download and run the platform installer on a clean OS image with no prior Conversation Simulator dataInstaller completes without requiring Python, Node.js, or any development dependencyManual
01.2On macOS: verify Gatekeeper prompt appears and the app opens via “Open Anyway”No persistent security exception required after notarisation; notarised build passes without dialogManual
01.3On Windows: verify SmartScreen prompt; signed build opens without “More info” clickSmartScreen passes for signed EV buildManual
01.4Confirm ~/.convsim/ (macOS/Linux) or %USERPROFILE%\.convsim\ (Windows) is created on first launchDirectory present; no data written before first-run wizardManual
01.5Confirm no model weights are present in the Steam depot after installfind ~/.convsim/models -name "*.gguf" returns emptyManual
#StepPass criterionMethod
02.1Launch app with no model installedModel Manager wizard is shown automatically; home screen is not accessible until a model is selected or skippedManual
02.2Open model details before downloadingAll six mandatory fields visible: model name, source, license, download size, SHA-256 checksum, destination pathManual
02.3Download the starter model (Qwen3 4B Q4_K_M)Download progress bar shown; SHA-256 verified after download; model status changes to "loaded"Manual
02.4Cancel a download mid-transferNo partial file remains in ~/.convsim/models/; model status is "not installed"Manual
02.5Attempt to download with insufficient disk spaceClear error message shown; no partial file; app remains functionalManual
02.6Model manager unit tests (no download)[model-mgr] CI gate passesAutomated
#StepPass criterionMethod
03.1All four official packs present without additional downloadJob Interview Basics, Everyday Negotiation, Language Café, Difficult Conversations all appear in the scenario pickerManual
03.2Pack schema validationconvsim validate-pack exits 0 for all four packs; zero errors, zero warningsAutomated
03.3Start a session in each official packNPC opening line delivered within 10 s (fake runtime) / 60 s (real model, CPU minimum tier)Manual
03.4Complete a multi-turn session in Job Interview BasicsAt least 3 player turns completed; NPC responds to each; session ends cleanlyManual
#StepPass criterionMethod
04.1Start a session with STT and TTS explicitly disabledSession runs in text-only mode; no audio UI elements activeManual
04.2Start a session when whisper.cpp is not installedApp falls back to text input automatically; status indicator shows STT unavailableManual
04.3Start a session when Kokoro is not runningNPC responses display as text only; no audio played; no crashManual
04.4Voice fallback CI tests[voice] gate passes; no tts_audio_chunk events in TTS-disabled sessionsAutomated
04.5Offline smoke test with text-only / fake runtimeoffline-smoke-test exits 0; no outbound connectionsAutomated
#StepPass criterionMethod
05.1Install whisper.cpp runtime; record a short English phrase; submit via push-to-talkNon-empty transcript returned; language matches English; NPC respondsManual
05.2Install Kokoro TTS; complete a turn with TTS enabledAt least one tts_audio_chunk event; audio plays without distortionManual
05.3Spanish STT path (Language Café / spanish_coffee)Transcript returned in Spanish; NPC responds in SpanishManual
05.4Real-runtime voice smoke tests (whisper_cpp + kokoro workers)All stages in test_voice_smoke.py pass end-to-endAutomated (CI with runtimes)
05.5Push-to-talk key does not conflict with Steam overlay (Shift+Tab)Both bindings coexist; Steam overlay and push-to-talk both functionalManual (Steam Deck / desktop)
#StepPass criterionMethod
06.1End a session after multiple turns and view debriefDebrief screen loads; rubric scores populated; export option presentManual
06.2End a session with zero scored turns (e.g., immediately after opening line)Debrief screen loads with empty/zero scores; no crash or error pageManual
06.3Export debrief as JSONFile written to local disk; file contains session metadata, turns, and rubric scoresManual
06.4Debrief engine unit tests[debrief] CI gate passesAutomated
#StepPass criterionMethod
07.1Navigate to Settings and locate privacy controlsTranscript history view, “Clear all local data” button, and local data path (~/.convsim/) all visibleManual
07.2Clear all session history via the UIAll sessions deleted from the local SQLite database; no file-manager navigation requiredManual
07.3Verify POST /api/privacy/clear API200 response; sessions table empty afterwardsAutomated
07.4Disable transcript saving; complete a sessionNo rows written to sessions or session_events tables after session endsManual
07.5Verify no conversation content in log files~/.convsim/logs/ contains no raw player text or NPC responsesManual
07.6Confirm telemetry_enabled defaults to false in /api/healthprivacy.telemetry_enabled is false; no outbound calls during sessionAutomated
#StepPass criterionMethod
08.1Reproduce a known error (e.g., start session without model)Error written to ~/.convsim/logs/; no raw player text in log; log rotation activeManual
08.2Locate log directory via the UISettings shows or links to log directory pathManual
08.3Bundle logs for a bug reportUser can copy log path and share with support; log contains enough diagnostic context to reproduceManual
08.4Backend log unit testsService startup, session lifecycle, and safety events logged at correct levels; no PII in log outputAutomated
#StepPass criterionMethod
09.1Block all network access (firewall or airplane mode) and start a play sessionSession runs normally with a locally installed model; no error or network-related warningManual
09.2Offline smoke test (scripted, from installed app binary)offline-smoke-test exits 0 from the installed app directory (not source checkout)Manual + Automated
09.3Network policy unit tests[offline] CI gate passes; NetworkBlockedError raised for any out-of-band connection attempt during playAutomated
09.4Confirm no background ping at startupPacket capture or system proxy shows zero outbound HTTP/HTTPS requests on app launchManual
#StepPass criterionMethod
10.1Uninstall the app using the platform mechanism (Windows Add/Remove Programs, macOS drag to Trash, Linux AppImage delete)App binary and assets removed; ~/.convsim/ data directory not removed by defaultManual
10.2Reinstall after uninstall with existing data directoryApp launches; existing sessions and model files detected; no re-download requiredManual
10.3”Clear all local data” then reinstallFirst-run wizard appears; model download required; no stale state from previous installManual
10.4Reinstall over an existing install (upgrade path)Existing sessions preserved; no database migration error; model files intactManual

TC-11 Controller-only full session (Steam Deck Verified gate)

Section titled “TC-11 Controller-only full session (Steam Deck Verified gate)”

Full end-to-end play from launch to quit using the controller alone — no keyboard or mouse contact. All steps must be completable with D-pad, A/B/X/Y buttons, left stick, and the on-screen keyboard only. Corresponds to the controller-only column added to §3 (Steam Deck verification checklist).

#StepPass criterionMethod
11.1Launch app in Gaming Mode from Steam libraryApp reaches Home screen; focus is placed on the first interactive elementManual — Steam Deck hardware
11.2Navigate Home screen with D-pad / left stickEvery link and status badge reachable; a visible focus ring appears on each element at 1280×800 from couch distanceManual — Steam Deck hardware
11.3Navigate to Scenario Library via controllerFocus moves correctly through nav links; Scenarios screen loadsManual
11.4Select a scenario pack and choose a scenarioCard selection works; Setup screen reached with no keyboard/mouseManual
11.5Enter a player name or adjust setup field with on-screen keyboardSteam floating keyboard appears automatically on text field focus; dismissed on confirmManual
11.6Start a conversation session in voice modeSession launches; R1 (right shoulder) triggers push-to-talk; NPC respondsManual
11.7Submit at least one text turn using the on-screen keyboardOn-screen keyboard appears on input focus; text submitted; NPC respondsManual
11.8End the session and navigate to the Debrief screenEnd session button reachable via controller; Debrief loadsManual
11.9Navigate Debrief screen and confirm readabilityAll debrief scores and text readable at 1280×800; no clipped controlsManual
11.10Navigate to Model Manager, Settings, Support, and Workbench screensEach screen fully navigable; no interactive element requires mouse hoverManual
11.11Confirm DebugDrawer is excluded from controller focus ringDebugDrawer (dev-mode only) never receives focus during D-pad navigationManual — dev build only
11.12Open and close Steam overlay (Shift+Tab) during a sessionOverlay opens and closes; controller focus resumes correctly in the appManual
11.13Quit the app via controllerApp closes cleanly; no orphaned processesManual

These thresholds are pass/fail criteria for QA sign-off. A platform + tier combination that cannot meet the minimum threshold is a blocker, not a deferral.

MetricMinimum tier thresholdStarter tier thresholdRecommended tier thresholdNotes
Session start (first NPC line)≤ 60 s≤ 20 s≤ 5 sTimed from “Start session” button press
First token latency≤ 15 s≤ 5 s≤ 2 sFrom player turn submission to first streamed token
Full NPC response≤ 90 s≤ 30 s≤ 10 sFrom player turn to complete response
Debrief generation≤ 30 s≤ 15 s≤ 5 sFrom “End session” to debrief screen ready
App cold-start to home screen≤ 10 s≤ 5 s≤ 3 sModel not counted; model load is separate
Model load (first load after download)≤ 120 s≤ 60 s≤ 20 sOne-time; subsequent loads may be faster via cache
MetricTarget
Battery impact during text session< 15 W average (document measured draw)
First-token latency on Steam Deck (Starter tier, 4 B model)≤ 30 s
Fan spin-up during sustained inferenceDocument observed; acceptable if intermittent
  • When first-token latency exceeds the threshold for the detected tier, the app must surface an in-app performance tip linking to Runtime Settings.
  • When RAM is insufficient for the selected model, the app must reject the model load with a clear “Insufficient memory” message before any OOM condition occurs.
  • When VRAM is insufficient for full GPU offload, the app must fall back to CPU+GPU split or CPU-only mode automatically and inform the player.
  • All degradation messages must be actionable (link to settings or model manager) and must not expose a stack trace to the player.

6. Private beta tester and machine inventory

Section titled “6. Private beta tester and machine inventory”

A minimum of five testers covering the required platforms must complete at least one full text session before the Stage 3 gate (G3-06) can be declared PASS.

PlatformRequired testersPreferred hardware examplesStatus
Windows 10 / 11 (x86-64)≥ 2Mid-range gaming laptop (RTX 3060), budget office desktop (integrated GPU)TBD
macOS — Apple Silicon≥ 1MacBook Air M2 / Mac Mini M2TBD
macOS — Intel≥ 1MacBook Pro Intel (2019–2020)TBD
Linux (x86-64)≥ 1Ubuntu 22.04 desktop or VM; Fedora 40TBD
Steam Deck≥ 1Physical Steam Deck (OLED preferred) running SteamOS 3.x in Gaming ModeTBD
  1. Tester receives a Steam private beta key from the Outright Mental publishing account.
  2. Tester installs the app from the Steam library and completes the first-run model setup.
  3. Tester completes the session verification steps in TC-03 and TC-06 and files the result in the beta feedback form (link TBD).
  4. Maintainer reviews results; any session-ending, data-loss, or privacy-regression bug blocks the Stage 3 gate.

Note: Machine and tester assignments will be updated in this table when the Stage 3 beta programme launches. If you are an Outright Mental team member with access to a listed platform, open a GitHub issue with the label beta-testing to register.


Copy this template and fill it in for each platform before declaring the corresponding release gate PASS. One completed sign-off is required per platform per gate stage.

=== Conversation Simulator — QA Sign-Off ===
Gate stage : [ ] Stage 2 (packaged alpha) [ ] Stage 3 (Steam beta) [ ] Stage 4 (public release)
Platform : ___________________________________ (e.g. Windows 11 x86-64)
Build version : vX.Y.Z-alpha.N (or Steam build ID)
Build date : YYYY-MM-DD
Tester name :
Tester email :
Sign-off date :
--- Hardware ---
CPU : ___________________________________
RAM : ___ GB
GPU / VRAM : ___________________________________ / ___ GB (or "integrated" or "CPU only")
Model tested : ___________________________________ (e.g. Qwen3 4B Q4_K_M)
Hardware tier : [ ] Minimum [ ] Starter [ ] Recommended [ ] High-end
--- Automated gates (CI) ---
Part A CI gates : [ ] PASS [ ] FAIL (link to CI run: ___________________________)
--- Manual test results ---
TC-01 Fresh install : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-02 First-run model setup : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-03 Official pack play : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-04 Text-only fallback : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-05 STT/TTS (if included) : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-06 Debrief : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-07 Privacy controls : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-08 Logs and crash bundle : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-09 Offline play : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
TC-10 Uninstall / reinstall : [ ] PASS [ ] FAIL [ ] SKIP Notes: __________________
--- Performance ---
Session start latency : ___ s [ ] Within threshold [ ] Exceeds threshold
First-token latency : ___ s [ ] Within threshold [ ] Exceeds threshold
Full NPC response : ___ s [ ] Within threshold [ ] Exceeds threshold
--- Steam Deck only ---
Controller navigation : [ ] PASS [ ] FAIL [ ] N/A
On-screen keyboard : [ ] PASS [ ] FAIL [ ] N/A
Offline smoke (SteamOS) : [ ] PASS [ ] FAIL [ ] N/A
Battery draw (observed) : ___ W average [ ] N/A
--- Overall result ---
[ ] PASS — all required test cases passed; no blocking issues found
[ ] PARTIAL — failures noted; see issues listed below; requires maintainer waiver
[ ] FAIL — one or more blocking issues remain open
Open blocking issues (GitHub #):
-
-
Additional notes:
-
-
Signed: ___________________________ (tester)
Countersigned: ___________________________ (maintainer, if PARTIAL or for Stage 4)

After all per-platform sign-offs above are complete, combine them into the aggregate beta verification report using the template in docs/STEAM_BETA_VERIFICATION_REPORT.md. The completed report must be attached to the release GitHub issue before the Stage 3 gate (G3-06) can be declared PASS.

Steam review sign-off (Stage 4 public release)

Section titled “Steam review sign-off (Stage 4 public release)”

Before opening the Stage 4 gate, the publishing owner must complete the following Valve-facing sign-off in addition to the platform QA sign-offs above.

  • All platform QA sign-offs (§7 above) are filed and show PASS for Windows, macOS Apple Silicon, macOS Intel, Linux, and Steam Deck.
  • Valve has approved the store page for public release (G4-01).
  • Valve has granted the Steam Deck Verified tier (G4-02).
  • Steam depot content audit (G3-02) confirmed: no model weights in depot.
  • Store page reviewed: no claims of AI therapy, diagnosis, or legal advice; local-first copy accurate (G4-04).
  • All compliance checklist items SR-01 through SR-08 signed off (G3-05).
  • Release-blocking risks in STEAM_COMPLIANCE_AND_RISK_REGISTER.md show MITIGATED, ACCEPTED, or DEFERRED (G3-04).
Steam review sign-off
Publishing owner : ___________________________
Date : YYYY-MM-DD
Steam App ID : ___________________________
Build submitted : ___________________________
Notes :
-