Tester Troubleshooting
This runbook is for testers who need to answer player questions about recorded hours and uploaded files.
Core questions
Testers should be able to answer:
- Did this player record sessions?
- How many validated recording hours does the player have?
- Which sessions are uploadable, blocked, failed, or uploaded?
- For each uploaded session, are MP4, CSV, and JSON present?
- What are the S3 download URLs for each uploaded artifact?
- If a session failed or was blocked, what is the specific reason?
Lookup key
The preferred human lookup key is steam_name. Tester dashboards can map from steam_name to Playroll user identity and then to sessions/uploads.
The stable technical identity should remain the user ID stored by the product. steam_name is useful for support, but it can change and should not be treated as the only identity.
Expected tester summary
For a given player, show:
| Field | Description |
|---|---|
| Steam name | Human lookup key. |
| Playroll user ID | Stable product user identity. |
| Total sessions | Count of known recording sessions. |
| Uploadable sessions | Sessions that passed validation. |
| Uploaded sessions | Sessions with complete uploaded triplets. |
| Blocked sessions | Sessions that failed local validation. |
| Failed sessions | Sessions that did not finish normally. |
| Valid recorded hours | Sum of validated session durations. |
| Uploaded hours | Sum of sessions with complete uploaded artifacts. |
| Latest activity | Most recent session or upload timestamp. |
Session detail
Each session row should show:
| Field | Description |
|---|---|
| Session ID | Stable session identifier. |
| Started at | Recording start timestamp. |
| Ended at | Terminal timestamp. |
| Duration | Validated duration when available. |
| Final status | uploadable, blocked, failed, or uploaded. |
| Failure reason | Granular reason when blocked or failed. |
| MP4 | Present/missing plus S3 URL if uploaded. |
| CSV | Present/missing plus S3 URL if uploaded. |
| JSON | Present/missing plus S3 URL if uploaded. |
Known symptom: hotkeys dead + "no activity" stop on a healthy recording
If a player reports that the recording hotkey (F5) does nothing in-game and recordings started from the UI stop after ~30–45 s with an inactivity error while the video looks fine, the game (or its launcher) is almost certainly running as administrator: Windows UIPI blocks Playroll's hotkeys and input capture while the elevated game window is focused.
- Since the EC-365 fix, core surfaces this as
INPUT_BLOCKED_ELEVATED_GAME(instead of the genericINPUT_IDLE_TIMEOUT) and the session baseline eventcapture.v2.target_baselinecarriestarget_proc_elevated(true/false/unknown_access_denied) pluscore_elevated. - Remediation for the player: disable "Run as administrator" on the game and its launcher (Properties → Compatibility), restart the game. Running Playroll elevated also works but is not recommended as a default.
- On older versions (≤ 4.1.11) the same condition shows up as
INPUT_IDLE_TIMEOUTwith near-zerototal_eventsininput.recording_stopdespite an in-game player — checktarget_proc_elevatedis absent there and diagnose by asking about Run-as-administrator directly.
Escalation checklist
Escalate to engineering when:
- A player has local successful sessions but no server records.
- Uploaded artifact counts do not match the expected triplet.
- Validated hours differ materially from MP4 duration.
- A session has no terminal state.
- Failure reason is generic and does not explain the issue.
Signals to collect before escalation
When a player reports that recording failed, uploaded hours look wrong, or a video looks bad, collect:
| Signal | Why it matters |
|---|---|
| User-facing error code | Stable code from core, for example WINDOW_NOT_16_9 or ENCODER_FAILURE_MIDSESSION. |
| Session final status | Distinguishes uploadable, blocked, failed, and uploaded. |
| Validation block reason | Explains why MP4/CSV/JSON did not become uploadable. |
capture.v2.fps_profiler.event | Shows whether core detected low FPS and the likely reason. |
| Upload events | Shows whether files reached S3 or failed before upload. |
| Window/settings events | Explains stops caused by window loss, auto-pause, or settings policy. |
The full signal catalog is maintained in Core Signals.