CNA-BUG-173: GamerPresence maps a presence mode to its display string through an alphabetically ordered table indexed by the enum ordinal

CNA snapshot 009d40f5  ·  Known Issues › Current bugs  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.

setPresenceModeProperty selects presenceModeStrings_[static_cast<size_t>(mode)], but the 60-entry table is sorted by name while GamerPresenceMode follows XNA's declaration order, so None maps to 'Arcade Mode'; the string is not yet observable.

Identifier
CNA-BUG-173
Category
Bug
Subsystem
Networking & gamer services
Status
Open
Verified against
CNA 009d40f5 (009d40f5dd085c4e674d3479675fac84b12b3e0a)
Severity
Low (a triage suggestion, not a project priority)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
GamerPresence::setPresenceModeProperty(GamerPresenceMode) and GamerPresence::SetPresenceModeStringEXT(const std::string&)

Expected behaviour

The string chosen for a GamerPresenceMode should be that mode's display text (SinglePlayer → “Single Player”).

Actual behaviour at TARGET

GamerPresence.cpp defines presenceModeStrings_ in alphabetical order (“Arcade Mode”, “At Menu”, “Battling Boss”, …), while GamerPresenceMode.hpp declares None, SinglePlayer, Multiplayer, LocalCoOp, … in XNA's order (pinned by GamerServicesEnumsTests.cpp). setPresenceModeProperty indexes the table by the enum value and passes the result to SetPresenceModeStringEXT. That method is empty and presence_ is private, so the wrong string is invisible today; it will surface as soon as presence is published. Whether FNA shares the ordering was not checked.

Source locations

Evidence

Checked by reading at 009d40f5; not executed. Latent: no current public behaviour exposes the selected string.

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

GamerServicesEnumsTests.cpp pins the enum ordinals; no test checks the mode-to-string mapping.

Regression test

A table test mapping each GamerPresenceMode to its expected string (a switch or a table ordered like the enum).

Blast radius

None today; any future presence publisher (CNA-GAP-052).

Workaround

No workaround is known.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.

Known issues
Bug index