# V3 Cold Join Validation

Canonical source: `libs/oshun/analytics/src/v3-cold-join-budget.ts`

Evidence artifact: `V3/validation/cold-join-validation.json`

Manifest version: `v3-cold-join-budget.v1`

The Lilith native UE cold-join gate validates the path from the "join room" tap
to a fully-rendered standard-fidelity Atrium scene. The deterministic harness
uses 96 cold-asset-cache samples for the `native_ue` client, a Class-tier
standard-fidelity visible set of 32 entities, a 60 fps render target, and the
5,000 ms p95 launch budget from `V3/V3_TODOS.md` §66.11.

| Phase                                  | Budget | p50    | p95    | Max    |
| -------------------------------------- | ------ | ------ | ------ | ------ |
| `tap_to_room_ticket`                   | 500 ms | 444 ms | 467 ms | 469 ms |
| `room_ticket_to_world_shard`           | 650 ms | 552 ms | 585 ms | 589 ms |
| `world_shard_to_initial_snapshot`      | 750 ms | 656 ms | 695 ms | 699 ms |
| `snapshot_to_standard_fidelity_assets` | 1.7 s  | 1.50 s | 1.58 s | 1.59 s |
| `assets_to_avatar_spawn`               | 650 ms | 559 ms | 595 ms | 599 ms |
| `avatar_spawn_to_fully_rendered_frame` | 900 ms | 790 ms | 835 ms | 839 ms |
| **Join tap to fully-rendered scene**   | 5.0 s  | 4.51 s | 4.62 s | 4.68 s |

The gate is anchored to `apps/v3/lilith-world-server/src/lib.rs`, where
`simulate_native_ue_cold_join` exercises the actual room spawn, room join, and
authoritative initial snapshot broadcast path before calculating the cold-join
percentiles. It is also mirrored in `V3/ue/Source/V3World/Private/V3World.cpp`
and covered by the UE automation test
`V3.World.Atrium.ColdJoinStandardFidelityUnderFiveSeconds`, which validates the
same phase budgets, render milestones, and 5 s fully-rendered scene threshold.

`pnpm verify:v3 cold-join` fails closed when the native UE profile is missing,
the budget is weakened, the run count is below 96, standard fidelity or the
authoritative snapshot is not present, the first fully-rendered frame is not
presented, any phase p95 exceeds its budget, total p95 or max exceeds 5 s,
percentiles are inconsistent, or the source/doc/evidence/UE automation wiring is
missing.
