Skip to content

Instantly share code, notes, and snippets.

@pollend
Created August 8, 2026 05:12
Show Gist options
  • Select an option

  • Save pollend/7bb0215bea99f08e23546b26116851ae to your computer and use it in GitHub Desktop.

Select an option

Save pollend/7bb0215bea99f08e23546b26116851ae to your computer and use it in GitHub Desktop.

Warfork 2.16 public test checklist

This is a manual regression plan for the current 2.16 candidate against the last 2.15 maintenance release. The review basis was v2.15.1 (6228c72e) through 0fdfd05d; the original v2.15 tag itself contains only the version bump and Shredder levelshot, while v2.15.1 adds heartbeat/Steam-pipe fixes.

No item is pre-checked. A checked item means the stated pass condition was observed on the exact build identified in the report, not merely that the action was attempted.

Priorities and stop rules

  • P0 — release gate. A failure blocks the candidate until triaged.
  • P1 — important changed behavior. Must have representative coverage.
  • P2 — compatibility, specialist fixture, or edge-case coverage.
  • Stop a test after a crash, hang, device loss, corrupted download, or repeated disconnect. Preserve the console log and do not overwrite the reproducing profile/download directory.

Organizer setup

Publish these with every candidate:

  • Candidate version, Git commit, Steam branch/artifact name, and publish time.
  • Known issues and an explicit statement on whether Vulkan demo AVI and Vulkan envshot are supported. The reviewed Vulkan AVI path currently asserts/does not write frames, and Vulkan envshot reports that it is unimplemented.
  • One stock pure dedicated server, one Steam-auth dual-transport server, one non-Steam UDP server, and one TV relay.
  • A small downloadable custom-map PK3, a larger resumable PK3, and a server that can deliberately make the preferred Steam/UDP route unreachable.
  • Named locations for a portal/mirror, fog/water, cubemap sky, videomap, and a material intentionally lacking a normal map.
  • Keep hostile BSP fuzz files internal. Public testers should receive only sanctioned malformed fixtures designed to fail safely.

Review-time release flags to resolve before inviting a large group:

  • The committed candidate reviewed here removes the client initdownload handler while the server still emits initdownload. There is a local, uncommitted source/client/cl_parse.c repair in the review worktree. NET-10 must be run against the exact published artifact.
  • Steam-first connection setup can wait on an unopened SDR socket. NET-04 must prove that a failed first route reaches the advertised fallback or exits with a bounded, useful error.
  • Received microphone audio uses an integer read of a fractional volume cvar. AUDIO-04 must explicitly verify audibility at default and non-default voice volume.
  • Confirm the final package includes map_pressure.pk3, map_return.pk3, and map_shredder.pk3; the shared asset packager does not itself copy top-level map PK3s.

Public coverage matrix

Do not ask every tester to run everything. Every tester runs Batch A, then claims one specialist batch.

Dimension Minimum public coverage
Windows Windows 10/11, Steam and direct executable, OpenGL and Vulkan
Linux Steam Runtime plus a native launch; X11 and Wayland; OpenGL and Vulkan
macOS Intel and Apple Silicon package smoke where shipped; OpenGL; Vulkan only if intentionally offered
GPUs At least one NVIDIA, AMD, and Intel Vulkan result
Profiles One clean profile and one real profile upgraded from 2.15.1 per OS
Network UDP dedicated, listen server, Steam SDR/P2P, dual-transport fallback, TV relay
Multiplayer At least one Windows-to-Linux session and one 8+ client/bot soak

Suggested assignment:

  • Batch A — everyone, 20 minutes: package, launch, backend, local match, public join.
  • Batch B — renderer/content, 45–60 minutes: GL/Vulkan parity, shaders, maps, models.
  • Batch C — networking/Steam, 60 minutes: browser, UDP/SDR, fallback, download, auth.
  • Batch D — gameplay/UI, 45 minutes: modes, movement, votes, scoreboard, HUD.
  • Batch E — platform/audio/media, 45 minutes: input/focus, OpenAL, voice, demos, screenshots.
  • Batch F — group soak, 60+ minutes: mixed clients, map changes, joins/leaves, voice and effects.

Report header

Copy this into each result or bug:

Build commit / Steam branch:
Test ID:
Result: PASS / FAIL / BLOCKED
OS and version:
CPU / RAM:
GPU and driver:
Renderer: ref_gl / ref_nri
Display mode and resolution:
Launch: Steam / direct
Profile: clean / upgraded from 2.15.1
Topology: local / listen / UDP dedicated / SDR / TV
Server address or name:
Reproduction rate:
First bad step:
Expected:
Actual:
Console log path:
Screenshot/video/demo:

Batch A — universal release gates

  • REL-01 [P0] Clean packaged launch — Install/extract the official artifact in a clean directory, launch without developer files, reach the menu, start wfdm1, and return to the menu. Pass: UI, fonts, modules, map, and sound load without a missing library/module/PK3 error.
  • REL-02 [P0] Upgrade profile — In 2.15.1 set a distinctive name, bind, favorite, block entry, and video/audio settings; update and launch the candidate. Pass: supported settings persist or migration is explained; there is no silent first-run reset or stale asset override.
  • REL-03 [P0] Shipped package contents — On each OS verify pressure, return, and shredder appear with correct levelshots and launch. Start one stock map too. Pass: all map and data*_21/modules_21 content is discoverable without using a source checkout.
  • REL-04 [P0] Steam and direct launch — Launch from Steam, directly with Steam running, and directly with Steam stopped. Continue past the no-Steam warning. Pass: Steam identity is present when active; menu/local play and non-Steam UDP remain usable when inactive; no hang or assertion.
  • REL-05 [P0] Renderer startup — Start once with vid_ref ref_gl and once with vid_ref ref_nri where offered. Pass: menu, console, local map, HUD, players, weapons, and effects render; unsupported Vulkan gives a usable fallback/error rather than a black-screen boot loop.
  • REL-06 [P0] Live backend switch — Switch GL→Vulkan→GL five times through Options, opening console and entering a match after each restart. Pass: the selected renderer, fonts, UI, cgame, input, and audio reinitialize with no crash, blank UI, duplicate sound, or progressive slowdown.
  • REL-07 [P0] Window/fullscreen lifecycle — Toggle fullscreen ten times, Alt+Tab/minimize between toggles, and change resolution in windowed and fullscreen modes. Pass: correct image/aspect/focus returns; no black frame, off-screen window, frozen cursor, or device loss.
  • REL-08 [P0] Local and public match smoke — Spawn locally, then join one public server; move, collect an item, fire every weapon, die/respawn, show scoreboard, chat, disconnect, and rejoin. Pass: normal prediction, HUD, audio, scoring, and transitions with no crash or missing media.
  • REL-09 [P0] Non-Steam UDP join — With Steam stopped and cl_prefer_steam_p2p 1, join a steam=no browser row and via connect <ip>:<port>. Pass: connection proceeds over UDP without a fake Steam target, indefinite wait, or preference change.
  • REL-10 [P0] Stock pure join — From a clean install join sv_pure 1, run purelist, play and change maps. Pass: stock packages/modules match and no download or pure loop occurs.
  • REL-11 [P0] Custom PK3 join — Remove the test PK3 from downloads and join the supplied pure custom-map server. Pass: progress advances, checksum verifies, media restarts, the map mounts, and connection completes. Record whether transport was UDP or SDR.
  • REL-12 [P0] Browser stability — Refresh and switch All/Normal/Instagib/Race/TV/Favorites twenty times, backing out while results arrive. Pass: rows settle without crash, freeze, stale blank screen, or duplicate/lost results.
  • REL-13 [P0] New demo and screenshot — Record one minute, stop, replay the .wfdz23, seek once, and take PNG/JPG/TGA screenshots. Pass: demo metadata/playback and all image files are valid, correctly oriented, and written under the user directory.

Batch B — renderer and content

Use the same viewpoint for GL/Vulkan comparisons and attach paired screenshots. Run Vulkan on multiple GPU vendors.

  • RENDER-01 [P0] Scene parity — Compare world geometry, patches, sky, players, view weapon, pickups, HUD, decals, and transparent effects. Pass: contents, culling, depth order, colors, and lightmap placement match closely; nothing is missing, inverted, or fullbright only on Vulkan.
  • RENDER-02 [P0] Map/resource lifecycle — Cycle pressure, return, shredder, and two older stock maps three times; disconnect, join another map, return local, then vid_restart. Pass: no prior-map textures/lightmaps/entities leak and registration does not crash or progressively lose assets.
  • RENDER-03 [P1] Portal/mirror — At the published portal location set r_portalmaps 1; view it head-on/obliquely, enter/leave its PVS, resize, and fire effects nearby. Pass: orientation, clipping, pairing, update rate, and main view remain correct without black/stale content or flicker.
  • RENDER-04 [P1] Cubemap/skybox — Rotate through 360 degrees under a cubemap sky, then change maps. Pass: all faces have correct orientation/seams with no duplicated, black, upside-down, or previous-map face.
  • RENDER-05 [P1] Fog/water/transparency — At the published fog/water location move above, through, and below the boundary while firing effects. Pass: density/color transitions and transparent depth ordering are smooth and consistent across renderers.
  • RENDER-06 [P1] Health deform shaders — Watch all health models while moving around them for 20 seconds. Pass: wave/bulge animation is smooth and does not collapse, explode, reverse, or diverge between GL and Vulkan.
  • RENDER-07 [P1] Normal/specular/offset materials — Toggle r_lighting_deluxemapping 0/1, r_lighting_specular 0/1, and r_offsetmapping 0/2, restarting when latched. Pass: expected lighting changes occur without black, white, checkerboard, inverted, or sparkling surfaces.
  • RENDER-08 [P1] Default normal fallback — Inspect the marked material that intentionally has no _norm image under changing light. Pass: it uses neutral normal lighting with intact diffuse texture and no missing-texture or wild directional shading.
  • RENDER-09 [P1] Dynamic lights — Toggle r_dynamiclight 0/1 and fire rocket/plasma near walls, models, fog, and pickups. Pass: enabled lighting has stable color/falloff and disabled mode removes it without flashing whole surfaces.
  • RENDER-10 [P1] Shadows — Test cg_shadows 0, 1, and 2 with players, first-person weapon, and pickups near walls/ledges. Pass: modes are none/blob/projected as intended; shadows do not detach, clip early, cover the view, flicker, or disappear on Vulkan.
  • RENDER-11 [P1] Outlines — Test cg_outlinePlayers 0/1/2, cg_outlineModels 0/1, and cg_outlineWorld 0/1; launch grenades/plasma. Pass: player modes are off/black/team-colored, models/projectiles follow their toggle, and world outlines neither flicker nor draw through occluders.
  • RENDER-12 [P1] Post-processing — Test all combinations of r_fxaa 0/1 and cg_colorCorrection 0/1, then resize/change maps. Pass: each effect is limited and visible with no black/washed-out frame, stale frame, or LUT binding corruption.
  • RENDER-13 [P1] Soft particles — Toggle r_soft_particles 0/1 while explosions/smoke intersect floors and walls. Pass: enabled mode fades intersections and neither mode produces halos, inverted depth, disappearance, or framebuffer artifacts.
  • RENDER-14 [P1] Weapon/effect assets — Fire every weapon repeatedly and observe muzzle flashes, trails, projectiles, bullet/plasma/gunblade impacts, explosions, and animated weapon textures from several angles. Pass: all frames advance and repaired meshes retain complete, correctly aligned silhouettes.
  • RENDER-15 [P1] Image/mipmap paths — Change r_picmip 0 to 4, restart, and vary r_texturefilter; inspect angled floors, normal/gloss maps, previews, and cubemaps. Pass: mip/filter changes are predictable with no solid-color mip, corrupt layer, or extreme shimmer.
  • RENDER-16 [P1] Screenshot formats — With each backend and display mode take default and named screenshots using r_screenshot_format 1, 2, and 3. Pass: PNG/JPG/TGA names, dimensions, orientation, channels, and current frame are correct; unsafe names are rejected.
  • RENDER-17 [P2] Cinematic/YUV surface — Play the published videomap fixture and open/close menus and fullscreen. Pass: video continues with correct RGB channels/orientation and without stale/black frames.
  • RENDER-18 [P2] Debug geometry — In a cheats-enabled local match toggle r_showtris 1/0 over world, patches, models, and effects. Pass: expected debug lines appear and leave no persistent render state.
  • RENDER-19 [P2] Custom lightmap size — Load approved BSPs using _lightmapImageSize 256/512/1024 and an over-limit case. Pass: valid lightmaps align at the correct resolution; over-limit input gives a controlled error, not a crash.
  • RENDER-20 [P2] Legacy community compatibility — Tour one known older community map and one current custom map while watching console. Pass: no new missing shader/texture regression after removal of legacy from shaderlist.txt; report exact shader names if found.

Map-specific tour

  • MAP-01 [P1] Pressure — Inspect water above/below, orange rock, normal/gloss panels, and scrolling jump beams. Pass: no checkerboards; water/fog/alpha, material lighting, and all beam layers are correct.
  • MAP-02 [P1] Return — Inspect decals at shallow angles and tour every texture set. Pass: clean alpha, no z-fighting/disappearing decals, and no missing or mismatched diffuse/normal/gloss asset.
  • MAP-03 [P1] Shredder — Inspect toxic sky, slime above/below, lamps, curved rock, and alpha floors. Pass: sky orientation, scrolling layers, pulsing lamps, two-sided transparency, and smoothed lighting are correct.
  • MAP-04 [P1] Repaired models — Inspect ammobox/spawn marker/instagun, then observe strong grenade, gunblade, plasma, rocket, and hit meshes. Pass: no mirrored icon, culling hole, faceted/inverted shading, vanishing edge, or misaligned outline.
  • MAP-05 [P1] All shipped BSPs — Rotate every shipped map once and walk/shoot around representative patches, movers, teleports, liquids, and collision. Pass: every map loads and visual geometry agrees with collision.
  • MAP-06 [P2] Controlled invalid BSP recovery — Organizer loads sanctioned truncated/bad-lump/patch fixtures, then loads wfdm1. Pass: readable controlled rejection, no crash/hang/huge allocation, and the next valid map is clean.

Batch C — networking, server browser, Steam, and TV

Topology labels: UDP-D = public dedicated UDP server; LISTEN = listen server plus remote client; SDR = Steam Datagram Relay/P2P; TV = game server → TV relay → viewer.

  • NET-01 [P0] Direct SDR session — Join a Steam-auth server via browser and connect "steam:<serverSteamID>"; move, fire, chat, score, and disconnect. Pass: challenge/auth/spawn/snapshots/commands/close complete without stall, duplication, or wrong identity.
  • NET-02 [P0] Transport preference — On a dual-advertised server test cl_prefer_steam_p2p 1 and 0, then Steamless and P2P-only listings. Pass: preferred route is honored, absent routes are skipped, and every row with one usable target joins.
  • NET-03 [P0] Automatic fallback — Deliberately break the preferred route while keeping the second route reachable; test SDR→UDP and UDP→SDR. Pass: the client tries the second target within a documented bound or returns a useful error; it never spins forever on Connecting.
  • NET-04 [P0] SDR map lifecycle — Keep 2+ authenticated clients connected across five map changes and one server restart, then deliberately close the server connection. Pass: map changes reauthenticate/reconnect; a real close clears the dead socket and returns cleanly rather than hanging.
  • NET-05 [P0] Listen/local Steam auth — Start a local game with sv_useSteamAuth 1 and add one remote client. Pass: loopback is not kicked for auth timeout and the remote player authenticates normally.
  • NET-06 [P0] Dedicated lifecycle — Launch wf_server; join/rejoin, rotate maps, and restart with sv_useSteamAuth 1, then 0. Pass: login/tickets close exactly once, Steam-off remains usable, and no server hang occurs.
  • NET-07 [P1] Public listing heartbeat — Start/stop listen and dedicated servers, issue heartbeat, refresh, then change map/player count. Pass: address, Steam flag/ID, counts, gametype, and ping update and the listing disappears after shutdown.
  • NET-08 [P0] Pure/version set — Join stock pure with a clean install and again with stale/duplicate 2.15 files in the home path. Pass: current installed *21*.pk3 and modules_21.pk3 win; obsolete duplicates do not shadow, loop, or mismatch.
  • NET-09 [P0] Missing custom PK3 over UDP — Clean downloads and join the supplied pure custom map. Watch cl_download_name, cl_download_percent, and downloadstatus. Pass: transfer/checksum/mount/reconnect complete and the map is playable.
  • NET-10 [P0] Missing custom PK3 over SDR — Repeat NET-09 via Steam relay. Pass: in-band transfer completes without relying on an invalid HTTP base address, and the client joins rather than looping or dropping.
  • NET-11 [P1] Download cancel/resume/corruption — Cancel a large transfer, reconnect to resume, then test stale oversized temp and wrong-checksum data. Pass: state cleans/resumes appropriately; corrupt data is removed and never mounted; UI remains responsive.
  • NET-12 [P1] Browser sort and parsing — Sort every column both directions during refresh; inspect colored/UTF-8, empty/full, bot, password, mode, Steam/no-Steam, and TV rows. Pass: monotonic sort, no lost/duplicate row, correct sanitized fields/filters, no assertion.
  • NET-13 [P1] Favorites and rapid selection — Favorite/unfavorite, restart, select rows while refresh events arrive, double-click and use Connect separately, then press Back during refresh. Pass: state persists, the correct server is joined once, and removed selection cannot be activated.
  • NET-14 [P1] Connection cancel timing — Press Escape immediately, near one/two/three seconds, during fallback, and while loading for UDP and SDR. Pass: early guard/cancel behavior is consistent, no new active match is accidentally dropped, and the next connect has no stale chain.
  • NET-15 [P1] Protocol compatibility — Connect 2.15.1 client↔candidate server in both directions. Pass: protocol 26/27 mismatch is rejected promptly with readable UI/console text, not a hang or parse crash.
  • NET-16 [P1] TV relay — Attach viewers, change maps, show scoreboard, spectate/multipov, and record/play a relay demo. Pass: upstream/downstream reconnect cleanly with no stale configstrings, score, protocol crash, or relay hang.
  • NET-17 [P0] Call-vote data transport — On a server with many maps/players repeatedly open vote UI and inspect map/gametype/kick/mute/remove lists. Pass: every row arrives once, loading terminates, selections work near the bottom, and there is no reliable-command overflow or stale list.

Steam and presence

  • STEAM-01 [P0] Shim lifecycle — Repeatedly launch/quit, force-close the game, and if approved terminate the shim during menu/play. Pass: no orphan after watchdog interval, blocked pipe, deadlock, SIGPIPE crash, or permanent startup failure.
  • STEAM-02 [P1] Persona sanitization — Launch with persona names containing Unicode, color tokens, quotes, semicolons, backslashes, empty and long values. Pass: valid safe name or safe fallback; no console injection or corrupt userinfo.
  • STEAM-03 [P1] Overlay/profile/avatar — Open overlay, View Profile, view scoreboard/voice avatars, change one avatar, and change maps. Pass: correct profile/data/dimensions update for the right player without freeze or swapped/corrupt image.
  • STEAM-04 [P0] Friend invite/join — Join a hosted game through Steam from menu and while on another server. Pass: correct server launches/connects and prior connection cleanup plus route selection/fallback completes.
  • STEAM-05 [P1] Rich presence — Observe menu, connecting, warmup, match, spectator, postmatch, map change, and disconnect. Pass: state/joinability updates promptly and clears without stale previous-server details.
  • STEAM-06 [P1] Discord presence/join — Repeat with Discord active, use Join Game, then launch without Discord. Pass: correct join target/state when active; controlled logging and no functional regression when absent.

Batch D — gameplay, cgame, UI, and HUD

  • GAME-01 [P0] Mode smoke — Play FFA, Duel, TDM/CA, CTF, Race, and Bomb through a scoring event and map end; join/spectate/change team/spawn/use objectives. Pass: rules, prediction, HUD, announcer, scoring, and transitions behave normally.
  • GAME-02 [P0] Default movement — With defaults 1000/1300/700, repeat dash-jump, wall-jump, failed wall-jump, crouch, and bunnyhop under latency. Pass: familiar timing/air control and no client/server prediction snap.
  • GAME-03 [P1] Live movement timing — Server changes all three g_pmove_*_timedelay values to obvious alternatives, then restores defaults while two clients play. Pass: both adopt changes without reconnect, stay predicted, and retain configured values after map change.
  • GAME-04 [P1] Instagib vote — Authenticated caller passes callvote instagib 1, verifies rules, then votes 0; try invalid/current values. Pass: valid state changes; invalid/current state is clearly rejected.
  • GAME-05 [P1] Failed-vote user cooldown — Set g_vote_usercooldowntime 30; player A loses then recalls, player B calls, then A retries after 30 seconds. Pass: only A is temporarily blocked and operators are not wrongly blocked.
  • GAME-06 [P0] Scoreboard states/layout — Press/release during play, warmup, postmatch, spectator, multipov, demo, and TV at 720p/1080p/ultrawide and varied font/width scales. Pass: immediate display, correct hide/postmatch state, no overlap, and deterministic team/FFA backgrounds.
  • GAME-07 [P1] Damage-number options — Test Tiny/Small/Medium/Large, several colors, and bullet/plasma/riotgun hits. Pass: selector never goes blank, visible size/color changes apply, and riotgun reports only intended damage.
  • GAME-08 [P1] RGB/color strings — Use legacy ^ colors, #RRGGBB, malformed/short RGB sequences in names/chat/server messages. Pass: valid color is consistent in chat/scoreboard/console/UI; malformed tokens do not eat text, bleed, or crash.
  • GAME-09 [P1] Blocklist — Block a player sending chat, vsay, and microphone voice; restart/rejoin, unblock, and View Profile. Pass: all blocked content/icons/audio are suppressed, persistence works, and unblocking/profile target is correct.
  • GAME-10 [P1] HUD controls — Exercise normal/strong/hit crosshair types/sizes/colors, cg_strafeHUD in race, outlines, and shadows. Pass: immediate correct behavior and persistence with no blank selection or backend-specific clipping/flicker.
  • UI-01 [P1] Map/model previews — Rapidly browse every Local Game levelshot and Player/Teams model/skin; rotate, change tabs, vid_restart, and try missing preview. Pass: correct centered/clipped live preview and stable fallback without stale/black/checkerboard image.
  • UI-02 [P1] Privacy Save/Cancel — Toggle crashreport, Save, restart, then test Cancel. Pass: Save persists and reports state; Cancel restores it. Do not intentionally crash a public tester's machine.
  • UI-03 [P1] Options persistence — Change representative Player/Teams/Video/Audio/Input/Privacy settings, testing Save and Cancel, then restart. Pass: only saved values persist and every sidebar link/form remains operable.
  • UI-04 [P1] Russian/localized UI smoke — Switch to Russian where supported and tour changed menus/server browser. Pass: no missing keys, raw identifiers, clipped critical controls, or crash; English remains intact.

Batch E — platform, input, audio, voice, demos, and media

  • PLAT-01 [P0] Cursor scaling — Use render resolution different from physical window size, DPI 125/150/200%, and ultrawide; sweep/click edges and small controls. Pass: cursor tracks 1:1 and clicks the element under it without drift or offset.
  • PLAT-02 [P0] Mouse/focus transitions — Alternate game↔menu↔console and Alt+Tab/minimize in each state. Pass: relative look returns without a jump, menus use absolute cursor, focus loss releases pointer, refocus restores state, and no key/button sticks.
  • PLAT-03 [P1] Invalid video recovery — Request unsupported resolution/frequency/fullscreen and negative/zero window positions, then restart. Pass: safe/previous mode returns with on-screen title bar and no config-deletion boot loop.
  • PLAT-04 [P1] Read-only install/write paths — Run without admin rights from a read-only install; change bind, favorite/block, record demo, screenshot, and save stats; restart. Pass: installation stays unchanged and all writable state persists under the stable user directory.
  • PLAT-05 [P0] Packaged dependencies — Test on a clean VM without developer SDL/OpenAL/Vorbis libraries. Pass: packaged libraries/modules resolve; Windows loads canonical soft_oal.dll; UI and audio work without PATH edits.
  • AUDIO-01 [P0] OpenAL lifecycle — Verify music/announcer/player/effects, run s_devices and s_restart, then change renderer. Pass: valid device, categories resume once, and no silence, duplicate playback, crash, or hang.
  • AUDIO-02 [P1] Mirrored stereo — Compare a clearly lateral sound with cl_flip 0/1 while turning. Pass: view and stereo swap exactly once; centered sounds stay centered and restoring 0 restores both.
  • AUDIO-03 [P1] Focus and sliders — Test s_globalfocus 0/1 and every mix slider at zero/intermediate/max through map changes, Save/Cancel, and restart. Pass: only intended category changes; streams recover and values persist/restore correctly.
  • AUDIO-04 [P0] Voice opt-in/PTT — Two Steam clients enable cl_enablevoice, bind/hold/release +voicerecord, overlap speakers, and vary cg_volume_voicechats including its default. Pass: intelligible audible voice from the correct client only while held; correct avatar/name/icon/team tint; disable and expiration stop sound/indicator.
  • AUDIO-05 [P1] Voice block/no-Steam — Verify block persistence suppresses live voice/vsay/HUD, then press PTT repeatedly without Steam. Pass: unblock restores content; no-Steam use is inert or clearly unavailable with no deadlock, flood, or stuck key.
  • MEDIA-01 [P0] Demo record/play/seek — Record 1–2 minutes, replay .wfdz23, pause/resume, and use absolute/relative demojump. Pass: correct writable path/metadata/audio/HUD and stable seeks across GL/Vulkan.
  • MEDIA-02 [P1] Old/corrupt demo — Open a 2.15 .wfdz22 and truncated demo. Pass: promised compatibility works, otherwise explicit clean rejection and return to menu without deletion/crash/hang.
  • MEDIA-03 [P1] Demo AVI — If declared supported, capture video+audio from a known v23 demo and inspect frames/audio. Pass: readable sequential frames and synchronized audio. Mark Vulkan BLOCKED/known unsupported, not PASS, if its current assertion remains.

Batch F — group soak

  • SOAK-01 [P0] Mixed transport match — Run 8+ clients/bots for 60 minutes using UDP and SDR, mixed Windows/Linux, every weapon, chat, scoreboards, voice on/off, joins/leaves, and at least five map changes. Pass: stable client/server frame time, ping and memory; no reliable-command overflow, queued SDR growth, device loss, Steam-shim CPU spike, deadlock, or heartbeat stall.
  • SOAK-02 [P1] UI/network churn — During SOAK-01 repeatedly refresh/sort browser, accept/reject invites, spectate/join teams, open vote lists, toggle scoreboard, and reconnect. Pass: correct selection/state and no stale rows, avatars, scores, voice indicators, connection chain, or crashes.
  • SOAK-03 [P1] Renderer churn — A designated client alternates busy effects, menus, fullscreen/Alt+Tab, screenshots, map changes, and one GL/Vulkan switch between sessions. Pass: no accumulating corruption, missing draw, lost input/audio, long stall, or worsening frame pacing.

Useful commands and cvars

developer 1
vid_ref ref_gl | ref_nri
vid_restart
vid_fullscreen 0 | 1
r_screenshot_format 1 | 2 | 3
screenshot [name]
r_portalmaps 0 | 1
r_fxaa 0 | 1
r_soft_particles 0 | 1
cg_colorCorrection 0 | 1
cg_shadows 0 | 1 | 2
cg_outlinePlayers 0 | 1 | 2
cg_outlineModels 0 | 1
cg_outlineWorld 0 | 1
cl_prefer_steam_p2p 0 | 1
connect <primary> <fallback>
sv_useSteamAuth 0 | 1
sv_pure 1
heartbeat
downloadstatus
downloadcancel
cl_enablevoice 0 | 1
bind <key> +voicerecord
cg_volume_voicechats <value>
g_pmove_dashjump_timedelay 1000
g_pmove_walljump_timedelay 1300
g_pmove_walljump_failed_timedelay 700
g_vote_usercooldowntime 30
callvote instagib 0 | 1
record <name>
stop
demojump <time>
demoavi

Exit criteria

  • Every P0 passes on Windows/OpenGL, Windows/Vulkan, Linux/OpenGL, and Linux/Vulkan unless the row is platform-specific.
  • Clean and upgraded profiles pass on every shipped OS.
  • All three network transports/topologies and custom pure download have a passing result.
  • No open crash, hang, data corruption, security-fixture escape, infinite connection/download loop, or renderer device loss.
  • Every P1 has at least one representative result per applicable backend/topology; every omitted P2 has an owner and reason.
  • Release owner publishes resolved status for Vulkan demo AVI/envshot, custom downloads, route fallback, map PK3 packaging, and any known limitations.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment