# Steam Workshop Integration

Task: `TODOS.phase-72.72.14.2.1`

The V2 mod distribution layer exposes Steam Workshop through
`FV2ModSteamWorkshopPolicy`, `FV2ModSteamWorkshopRequest`, and
`FV2ModSteamWorkshopOperation`. The runtime surface is deliberately split into a
deterministic planner and a native `V2SteamWorkshopBridge`: game code can
validate every upload, download, subscription, update, and rating request before
handing the operation to Steamworks.

## Runtime Contract

`BuildDefaultSteamWorkshopPolicy` declares the `ISteamUGC` calls required for
the integration:

- Upload: `CreateItem`, `StartItemUpdate`, metadata setters, content and preview
  setters, and `SubmitItemUpdate`.
- Download: `DownloadItem`, `GetItemInstallInfo`, and `GetItemState`.
- Subscribe: `SubscribeItem`, `DownloadItem`, `GetSubscribedItems`, and install
  info refresh.
- Update: `StartItemUpdate`, content or preview setters, tags, and
  `SubmitItemUpdate`.
- Rate: `SetUserItemVote` followed by `GetUserItemVote`.

The default policy keeps the Steam AppId and native bridge availability explicit
so editor automation and CI can validate the contract without silently faking a
live Steam client. Production configuration must provide a positive
`SteamAppId`, load the `V2SteamWorkshopBridge`, and accept the Workshop legal
agreement before upload or update operations are allowed.

## Operation Builders

Use the Blueprint helpers to create typed requests:

- `BuildSteamWorkshopUploadRequest`
- `BuildSteamWorkshopDownloadRequest`
- `BuildSteamWorkshopSubscribeRequest`
- `BuildSteamWorkshopUpdateRequest`
- `BuildSteamWorkshopRateRequest`

`EvaluateSteamWorkshopRequest` returns a `FV2ModSteamWorkshopResult` containing
the exact `ISteamUGC` call list, blocking validation issues, install/staging
paths, and whether the request is ready for the native Steam API bridge.

## Local State Projection

`ApplySteamWorkshopOperationToState` updates `FV2ModSteamWorkshopItemState`
after a bridge callback succeeds. Subscription and download operations mark the
item installed and clear pending download or update flags. Rating operations
preserve the chosen vote direction so the mod browser and author dashboard can
stay consistent with `GetUserItemVote`.

## Verification

Run:

```bash
python3 V2/ue/Tools/check-v2-steam-workshop-integration.py
python3 -m json.tool V2/ue/Content/V2/Modding/SteamWorkshopIntegration_V2_Contract.json
```

The focused checker verifies the contract, runtime declarations, implementation
snippets, automation assertions, CI/Horde wiring, and TODO evidence for
`72.14.2.1`.
