Skip to content

feature: anti-wallhack match option UI and status badge#486

Open
Flegma wants to merge 6 commits into
mainfrom
feature/anti-wallhack
Open

feature: anti-wallhack match option UI and status badge#486
Flegma wants to merge 6 commits into
mainfrom
feature/anti-wallhack

Conversation

@Flegma

@Flegma Flegma commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Web side of the CS2FOW anti-wallhack integration.

  • Anti-Wallhack (Fog of War) toggle in the shared MatchOptions form (default on); surfaces automatically in match creation, tournament forms, and stage forms
  • Options display row
  • Per-map shield badge on the match page from match_maps.anti_wallhack_active (hidden when never reported)
  • Regenerated zeus types

PRE-MERGE CHECKPOINT: regenerate zeus types against the real dev Hasura (Task 15 codegen ran against an ephemeral stack; restores the HOST constant, unrelated stale-main drift, and prod-only columns).

Design: docs/plans/2026-07-09-cs2fow-anti-wallhack-design.md (5stack local docs)
Part 3 of 3; merge after game-server PR #162 and api PR #342.

@Flegma Flegma force-pushed the feature/anti-wallhack branch from f6a0eb8 to 49bca44 Compare July 9, 2026 20:57
@Flegma

Flegma commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Max-effort code review completed on the rebased branch (10 finder angles, adversarial verification, gap sweep). Confirmed findings fixed in 43446d5:

  1. Display-default gap: setupOptions wrote the raw options value into the form, so an options object missing the field would render the switch OFF while submit-time zod defaults sent true (see OFF, save ON). The setValues line now applies ?? true, aligning display with submit semantics.
  2. Mobile overflow guard: the badge was a 7th no-wrap child in the absolutely-positioned control cluster inside an overflow-hidden card; on compact finished-map cards it could push demo controls out of view. The badge now hides below the sm breakpoint (supplementary status yields to functional controls; flip to flex-wrap instead if preferred).
  3. League season templates now set anti_wallhack: true explicitly in CREATE_MATCH_OPTIONS_MUTATION, documenting the product decision the way that literal already does for knife_round: false (identical to the DB default, zero behavior change).
  4. The duplicated badge label ternary is now a computed (antiWallhackLabel), and the tri-state check uses the repo-majority != null idiom.

Review notes, deliberately NOT changed (maintainer calls):

  • The sr-only span inside the badge is LOAD-BEARING: the Badge is a non-focusable div, so keyboard/touch users never open the tooltip; the span is their only announcement. Do not dedupe it away against the TooltipContent (a mouse-hover screen-reader combo hears the phrase twice; that trade-off protects the larger group).
  • Space-key on the switch rows double-toggles (the row div's @click plus reka's switch button both fire); pre-existing pattern shared by every boolean option row in MatchOptions.vue, not just the new one.
  • The draft-room settings bar shows a curated tile subset and deliberately has no anti-wallhack tile; add one if wanted (DraftGamesStore selections would need the field).
  • Pre-merge checkpoint stands: regenerate zeus against the real dev Hasura (HOST constant currently points at the ephemeral stack used during development).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant