# V2 Live Event Content Delivery

This runbook covers `TODOS.phase-72.72.12.2.6`: live event content delivery to
download event assets on demand, including maps, cosmetics, and NPC dialogue,
without a full patch.

The implementation lives in `@v2/live-event-content-delivery-service` at
`apps/v2/live-event-content-delivery-service/`. Its contract is
`V2/ue/Content/V2/LiveOps/LiveEventContentDelivery_V2_Contract.json` and the
validation gate is `V2/ue/Tools/check-v2-live-event-content-delivery.py`.

## Content Manifests

Live event content bundles define:

- `bundleId`
- `eventId`
- `requiredClientVersion`
- `onDemand`
- `fullPatchRequired`
- `assets`

Each asset includes `assetId`, `assetKind`, `contentHash`, `sizeBytes`, `uri`,
and `mountPoint`. Supported asset kinds are `map`, `cosmetic`, and
`npc-dialogue`. The service validates duplicate bundles, duplicate asset IDs,
content hashes, HTTPS URIs, mount points, asset sizes, asset-kind coverage, and
the no full patch requirement before publishing a manifest.

## On-Demand Downloads

`buildV2LiveEventContentDeliverySurface` publishes the server-authoritative
manifest. `planV2LiveEventContentDownload` compares the requested event bundle
against installed content hashes and returns only the missing assets. Download
plans always use `downloadMode: on-demand`, set `fullPatchRequired: false`, and
keep `requiresClientPatch: false`.

Primary APIs:

- `buildV2LiveEventContentDeliverySurface`
- `planV2LiveEventContentDownload`

Endpoints:

- `GET /v2/live-ops/events/{eventId}/content-manifest`
- `GET /v2/live-ops/events/{eventId}/content/{bundleId}/download-plan`
- `POST /v2/live-ops/events/{eventId}/content/{bundleId}/acknowledge`

## Operator Flow

1. Author live event content bundles with map, cosmetic, and NPC dialogue
   assets.
2. Publish manifests through `buildV2LiveEventContentDeliverySurface`.
3. Request per-account download plans when a player enters the event.
4. Download only missing event assets on demand.
5. Reject any bundle that requires a full patch before it reaches production.

## Release Gates

Required gates:

- `live-event-content-delivery-package`
- `live-event-content-delivery-on-demand`
- `live-event-content-delivery-maps`
- `live-event-content-delivery-cosmetics`
- `live-event-content-delivery-npc-dialogue`
- `live-event-content-delivery-no-full-patch`
- `live-event-content-delivery-validation`
- `live-event-content-delivery-ci-wired`

## Verification

```bash
pnpm --filter @v2/live-event-content-delivery-service test
pnpm --filter @v2/live-event-content-delivery-service typecheck
pnpm --filter @v2/live-event-content-delivery-service lint
pnpm --filter @v2/live-event-content-delivery-service build
python3 V2/ue/Tools/check-v2-live-event-content-delivery.py
python3 V2/ue/Tools/check-v2-ci-workflow.py
python3 V2/tools/validate-v2-docs.py
```
