Survival server cards misleadingly show “Current map: TranZit” #150

Closed
opened 2026-10-12 19:23:35 -04:00 by goddard · 1 comment
Collaborator

Expanded fleet cards for Town Survival, Farm Survival, and Bus Depot Survival can display “Current map: TranZit” beneath the correct Survival heading. The line suggests a different map or mode even when the reported engine map matches the server's selected variant.

Production verification on October 12, 2026 found both Town lobbies registered with map_slug: town, configured map: zm_transit, and observed last_map: zm_transit. Farm and Bus Depot have the same engine map with their respective variant slugs. This evidence does not indicate an engine-map change; the engine identifier alone cannot distinguish the variants.

Cause and scope

  • src/lib/map-aliases.ts:38-61 defines TranZit, Town, Farm, and Bus Depot as separate selections sharing zm_transit.
  • src/lib/ui/server-labels.ts:9-16 resolves a canonical map by its first matching entry, translating zm_transit to TranZit without variant context.
  • src/lib/fleet-overview.ts:69-90 uses the selected variant when it matches the observed engine map. src/routes/+page.svelte:575 passes that resolved name as the card heading.
  • src/lib/ui/components/ServerCard.svelte:79-80 independently applies the generic lookup and compares the resulting display text with the heading. Town Survival and TranZit differ, so :154-160 renders the misleading line. Empty compact cards hide it, explaining why only occupied Town lobbies showed it in the reported screenshot.

The fleet list and server-detail scoreboard already use the variant-aware fleet identity. A related fallback also needs coverage: when the variant is unknown, the generic lookup silently chooses TranZit. Conversely, an actual change to a different engine map currently changes the fleet identity and removes the old selection's launch shortcut; preserve that behavior.

Screenshots

Same synthetic Town lobby and data. The after image is a DOM mockup that removes the misleading duplicate line, not an implemented fix. Production data and application source were not modified.

Before:
Before

After (mockup):
After (mockup)

Fix

  • Use consistent, variant-aware map resolution for the fleet card heading and any Current map/Last map context. Do not interpret different friendly labels for the same selected engine map as a map change.
  • For known Town, Farm, and Bus Depot selections reporting zm_transit, retain their Survival names and omit the redundant TranZit line. Keep an explicitly selected TranZit server named TranZit.
  • When a shared engine map has no recognized variant, show an explicit ambiguous/raw-map fallback rather than asserting that the mode is TranZit.
  • Preserve genuine engine-map changes: display the observed map and keep the previous selection's launch shortcut unavailable. Do not force the configured Survival name onto a different reported engine map.
  • Preserve compact empty-card behavior and Current/Last wording wherever additional map context remains useful.
  • Add rendered-card regressions for all four zm_transit selections, custom server names with stored variant metadata, missing/unknown variants, compact versus expanded cards, stale observations, and a real map change such as zm_transit → zm_tomb. Verify reactive updates and consistency with fleet list/detail labels.

Validation

Reviewed main at 272055a. Reproduced the Town label in a real browser against a disposable fixture and verified that its detail scoreboard says Town Survival. Exercised map resolution for Town, Farm, Bus Depot, TranZit, Buried, an unknown variant, and a change to Origins. The two existing fleet-overview/server-card suites pass all 18 tests but do not cover the contradictory map line. Searched all 138 open and closed issues; no existing issue covers this label mismatch.

Expanded fleet cards for Town Survival, Farm Survival, and Bus Depot Survival can display “Current map: TranZit” beneath the correct Survival heading. The line suggests a different map or mode even when the reported engine map matches the server's selected variant. Production verification on October 12, 2026 found both Town lobbies registered with `map_slug: town`, configured `map: zm_transit`, and observed `last_map: zm_transit`. Farm and Bus Depot have the same engine map with their respective variant slugs. This evidence does not indicate an engine-map change; the engine identifier alone cannot distinguish the variants. **Cause and scope** - `src/lib/map-aliases.ts:38-61` defines TranZit, Town, Farm, and Bus Depot as separate selections sharing `zm_transit`. - `src/lib/ui/server-labels.ts:9-16` resolves a canonical map by its first matching entry, translating `zm_transit` to TranZit without variant context. - `src/lib/fleet-overview.ts:69-90` uses the selected variant when it matches the observed engine map. `src/routes/+page.svelte:575` passes that resolved name as the card heading. - `src/lib/ui/components/ServerCard.svelte:79-80` independently applies the generic lookup and compares the resulting display text with the heading. Town Survival and TranZit differ, so `:154-160` renders the misleading line. Empty compact cards hide it, explaining why only occupied Town lobbies showed it in the reported screenshot. The fleet list and server-detail scoreboard already use the variant-aware fleet identity. A related fallback also needs coverage: when the variant is unknown, the generic lookup silently chooses TranZit. Conversely, an actual change to a different engine map currently changes the fleet identity and removes the old selection's launch shortcut; preserve that behavior. **Screenshots** Same synthetic Town lobby and data. The after image is a DOM mockup that removes the misleading duplicate line, not an implemented fix. Production data and application source were not modified. Before: ![Before](https://gitea.thewrightserver.net/attachments/869f8bb4-693d-414f-9611-b1cdfba8f308) After (mockup): ![After (mockup)](https://gitea.thewrightserver.net/attachments/5c5424b9-fc39-430f-a21f-fd36c2088772) **Fix** - [x] Use consistent, variant-aware map resolution for the fleet card heading and any Current map/Last map context. Do not interpret different friendly labels for the same selected engine map as a map change. - [x] For known Town, Farm, and Bus Depot selections reporting `zm_transit`, retain their Survival names and omit the redundant TranZit line. Keep an explicitly selected TranZit server named TranZit. - [x] When a shared engine map has no recognized variant, show an explicit ambiguous/raw-map fallback rather than asserting that the mode is TranZit. - [x] Preserve genuine engine-map changes: display the observed map and keep the previous selection's launch shortcut unavailable. Do not force the configured Survival name onto a different reported engine map. - [x] Preserve compact empty-card behavior and Current/Last wording wherever additional map context remains useful. - [x] Add rendered-card regressions for all four `zm_transit` selections, custom server names with stored variant metadata, missing/unknown variants, compact versus expanded cards, stale observations, and a real map change such as `zm_transit` → `zm_tomb`. Verify reactive updates and consistency with fleet list/detail labels. **Validation** Reviewed main at `272055a`. Reproduced the Town label in a real browser against a disposable fixture and verified that its detail scoreboard says Town Survival. Exercised map resolution for Town, Farm, Bus Depot, TranZit, Buried, an unknown variant, and a change to Origins. The two existing fleet-overview/server-card suites pass all 18 tests but do not cover the contradictory map line. Searched all 138 open and closed issues; no existing issue covers this label mismatch.
goddard added the
priority
medium
type/bugtype/ux
labels 2026-10-12 19:23:35 -04:00
josh was assigned by goddard 2026-10-12 19:23:35 -04:00
Author
Collaborator

Reviewed bcd3b99ee4. All fix items are complete; closing this issue.

Checklist

  • One map resolver. ServerCard now uses fleetIdentity, with game/variant/mode metadata passed by the fleet page.
  • All four selections. Rendered-card tests retain Town/Farm/Bus Depot Survival and explicit TranZit labels without redundant map context.
  • Ambiguous fallback. server-labels.ts:9 returns the raw engine map plus “variant unknown” when multiple selections share it.
  • Real changes. Tests switch from zm_transit to zm_tomb, show Origins, and remove the old launch shortcut.
  • Compact/stale behavior. Rendered tests retain compact empty cards and useful Current/Last wording.
  • Reactive coverage. ui-server-card-maps.test.ts exercises custom names, stored/missing/unknown metadata, stale/offline observations, reactive changes and shared card/list/detail labels.

Review notes

  • Reviewed current EC main at fa0baa8db5. Full application suite passed: 230 files, 3,120 tests, including migration-memory coverage; no failures or skips.
  • Python agent suite: 332 tests passed, no skips. Type/style checks: zero errors and warnings.
  • Validation is rendered-component coverage; the reused browser fixture had no Town cards available, so it was not counted as a browser reproduction of this fix.
Reviewed bcd3b99ee484a3b41a2c0453ff32df8791c05b86. All fix items are complete; closing this issue. **Checklist** - [x] **One map resolver.** ServerCard now uses `fleetIdentity`, with game/variant/mode metadata passed by the fleet page. - [x] **All four selections.** Rendered-card tests retain Town/Farm/Bus Depot Survival and explicit TranZit labels without redundant map context. - [x] **Ambiguous fallback.** `server-labels.ts:9` returns the raw engine map plus “variant unknown” when multiple selections share it. - [x] **Real changes.** Tests switch from `zm_transit` to `zm_tomb`, show Origins, and remove the old launch shortcut. - [x] **Compact/stale behavior.** Rendered tests retain compact empty cards and useful Current/Last wording. - [x] **Reactive coverage.** `ui-server-card-maps.test.ts` exercises custom names, stored/missing/unknown metadata, stale/offline observations, reactive changes and shared card/list/detail labels. **Review notes** - Reviewed current EC main at fa0baa8db5f7629de3f58f2e6bf8da0568018be0. Full application suite passed: 230 files, 3,120 tests, including migration-memory coverage; no failures or skips. - Python agent suite: 332 tests passed, no skips. Type/style checks: zero errors and warnings. - Validation is rendered-component coverage; the reused browser fixture had no Town cards available, so it was not counted as a browser reproduction of this fix.
Sign in to join this conversation.