# V2 Rich Presence Routing

Phase 72.21.1.8 routes a player's current activity to the platform friends-list
presence surface. `FV2RichPresenceActivity` captures the local activity and
`FV2RichPresencePlatformPayload` carries the provider-specific update plan
through the V2 platform SDK abstraction.

## Activity Text

The default template is `Playing {LevelName} - {EncounterName}`. For a level
activity with `Level 5` and `Boss Fight`, the platform display text is:

```text
Playing Level 5 - Boss Fight
```

When streamer mode is enabled, activity details are redacted to `Playing Oshun`
before any native platform payload is built.

## Provider Routes

| Provider             | Friends-list surface         | Native bridge                | Presence command                         |
| -------------------- | ---------------------------- | ---------------------------- | ---------------------------------------- |
| Steamworks           | Steam friends rich presence  | `V2SteamworksSdkBridge`      | `ISteamFriends::SetRichPresence`         |
| Epic Online Services | EOS presence                 | `V2EosSdkBridge`             | `EOS_Presence_SetPresence`               |
| GOG Galaxy           | Galaxy friends rich presence | `V2GogGalaxySdkBridge`       | `galaxy::api::IFriends::SetRichPresence` |
| PlayStation SDK      | Public activity model        | `V2PlayStationSdkStubBridge` | `Activities.Update`                      |
| Xbox GDK             | Xbox friends presence        | `V2XboxGdkSdkStubBridge`     | `XboxPresence.SetRichPresence`           |

Console routes are public-stub-only in `V2OnlineServices`. Proprietary
PlayStation and Xbox headers or symbols stay in the restricted platform SDK
modules.

## Rules

`PlanRichPresencePlatformUpdate` queues a provider update only when the account
has a linked platform account, the activity is not offline, route coverage
exists for the provider/platform pair, the display text fits the configured
platform budget, and payload sanitization has run. Join hints are included only
when a join secret is present and streamer mode is off.

## Verification

Run:

```bash
python3 V2/ue/Tools/check-v2-rich-presence-routing.py
```

The checker validates the C++ API, contract, automation spec, CI workflow, Horde
gate, documentation, and TODO evidence for Section 72.21.1.8.
