Skip to main content

Tester Views

ActivePermanentSource: Supabase (playroll_supa_new)

Server-side views that answer player-level support questions: "what did this player upload, when, and why was a session blocked?". Backed by SQL views in the public schema, prefixed support_*, plus an identity-lookup helper.

Lookup flow

The canonical lookup path for a tester report is:

playroll_users_view

Identity resolution. Maps any of the identifiers a player might mention back to a user_id.

ColumnType
user_idtext
steam_idtext
steam_usernametext
avatar_urltext
emailcharacter varying
discord_usernametext

support_player_upload_summary

One row per player. The starting point for triage: scope of activity, completeness, and time range.

ColumnTypeMeaning
user_id, display_name, steam_id, avatar_url, discord_usernametextIdentity.
search_texttextConcatenated searchable identity string.
total_sessions_seenbigintAll sessions observed for this player.
sessions_with_uploadsbigintSessions with at least one artifact landed.
valid_current_sessionsbigintSessions meeting the MP4+CSV contract.
valid_future_triplet_sessionsbigintSessions meeting MP4+CSV+JSON.
partial_upload_sessions / no_upload_sessionsbigintBreakdowns of incompleteness.
total_files, mp4_files, csv_files, json_files, ogg_filesnumericArtifact counts by type.
total_size_bytes, total_size_prettybigint / textTotal bytes uploaded.
first_upload_at, last_upload_attimestamptzActivity window.
gamestext[]Games seen for this player.
sessions_with_known_duration, known_recorded_seconds, known_recorded_hoursbigint / numericDuration coverage.
duration_coverage_pct_for_valid_current_sessionsnumericFraction of valid sessions with a known duration.

support_recording_sessions

One row per recording session. The main drill-down surface for "why did this session not upload?".

ColumnTypeMeaning
user_id, display_name, steam_id, avatar_url, discord_usernametextIdentity.
session_idtextSession key.
game, game_slug, game_nametextGame references.
recording_session_statustextServer-side lifecycle status.
session_created_at, session_updated_at, client_ended_at, server_verified_attimestamptzLifecycle anchors.
first_upload_at, last_upload_attimestamptzUpload window.
recording_started_at, recording_ended_attimestamptzCapture window.
duration_seconds, duration_qualitybigint / textMeasured duration and confidence label.
total_files, mp4_count, csv_count, json_count, ogg_countbigintArtifact counts.
total_size_bytesbigintBytes for the session.
has_current_required_pair, has_future_required_tripletbooleanContract checks.
upload_consistency_statustextCoherence between expected and observed artifacts.
required_artifact_modetextWhether the session is evaluated against the current (pair) or future (triplet) contract.
uploadability_statustextFinal disposition: uploadable, blocked, partial, etc.
block_reasontextHuman-readable reason when uploadability_status is blocking.
mp4_s3_keys, csv_s3_keys, json_s3_keys, ogg_s3_keystext[]S3 keys per type, for direct fetch.
filesjsonbFull per-artifact metadata.
detected_resolutionjsonbCapture resolution(s) observed for the session.

support_recording_files

One row per uploaded artifact. Use this when investigating a specific file or building an S3 link to share with a player.

ColumnTypeMeaning
upload_iduuidArtifact key.
user_id, display_name, steam_id, avatar_url, discord_usernametextIdentity.
session_idtextOwning session.
game_slugtextGame reference.
file_type, filename, size_bytestext / text / bigintArtifact descriptors.
statustextUpload status of the artifact.
uploaded_attimestamptzWhen it landed.
recording_started_at, recording_ended_attimestamptzCapture window of the source session.
s3_bucket, s3_key, s3_uri, s3_object_urltextDestination references.

Operational helpers

These public views are not tester- or VC-facing per se, but are consumed by the views above:

  • daily_upload_stats — daily file/user/session/byte counts by type.
  • session_completion_statusexpected_chunks vs uploaded_chunks per session, plus is_complete.
  • complete_triplets — per (user, session, chunk_dir) whether mp4+csv+json are all present.
  • upload_summary_by_user — per-user totals including games list (older shape; prefer support_player_upload_summary).

Relationship to OTEL dashboards

Tester views answer "what arrived on the server?" — server-authoritative state. OTEL dashboards (e.g. Capture Pipeline) answer "what did the client try to do?" — client-emitted telemetry. When a player reports a missing session, the recommended order is:

  1. OTEL Errors & Auth to confirm the client was authenticated and not blocked.
  2. OTEL Capture Pipeline (client) to confirm the recording funnel reached recording.stop.
  3. support_recording_sessions to see whether the server received the session and what uploadability_status / block_reason says.
  4. support_recording_files to look at the specific artifacts and their S3 destinations.