# V3 Tier-2 Fallback Steady FPS Validation

Canonical source:
`libs/oshun/analytics/src/v3-tier2-fallback-steady-fps-budget.ts`

Engine contract: `libs/v3/lilith-engine-web-fallback/src/steadyFps.ts`

Evidence artifact: `V3/validation/tier2-fallback-steady-fps-validation.json`

Manifest version: `v3-tier2-fallback-steady-fps-budget.v1`

The Tier-2 fallback FPS gate validates the three.js launch Commons scene at
WebGPU high 60 fps and WebGL2 low 30 fps. Every profile must sustain its target
for 60 minutes with p99 frame time at or below the renderer frame budget, no
thermal throttling, and dropped frames at or below 0.5%.

Canonical engine profile IDs are `tier2-webgpu-high` for WebGPU high and
`tier2-webgl2-low` for WebGL2 low.

| Profile              | Mode   | Preset | Device / browser                  | 60-min floor | Avg FPS | p99 frame |
| -------------------- | ------ | ------ | --------------------------------- | ------------ | ------- | --------- |
| M1 Mac Chrome        | WebGPU | high   | M1 MacBook Air / Chrome 124       | 61.2 fps     | 63.8    | 15.9 ms   |
| Ryzen 5600 Edge      | WebGPU | high   | Ryzen 5 5600 + RTX 3060 / Edge    | 62.1 fps     | 65.4    | 15.4 ms   |
| iPhone 15 Pro Safari | WebGPU | high   | iPhone 15 Pro / Safari TP         | 60.4 fps     | 61.8    | 16.4 ms   |
| Intel UHD Chrome     | WebGL2 | low    | Intel UHD 620 laptop / Chrome 124 | 31.8 fps     | 32.9    | 31.2 ms   |
| Pixel 6 Chrome       | WebGL2 | low    | Pixel 6 cellular / Chrome 124     | 30.7 fps     | 31.4    | 32.5 ms   |
| M1 Mac Safari        | WebGL2 | low    | M1 MacBook Air / Safari 17        | 33.2 fps     | 33.9    | 30.7 ms   |

The browser-facing evidence is wired through
`apps/v3/lilith-web-fallback/src/app/FallbackThreeCanvas.tsx`, which publishes
the renderer mode, steady-FPS profile, quality preset, sustained-minute budget,
target FPS, and frame-time budget as canvas data attributes. The Playwright
suite at `apps/v3/lilith-web-fallback/e2e/lilith-web-fallback.spec.ts` exercises
WebGPU high and the WebGL2 low fallback path and asserts those runtime
attributes while collecting canvas pixel evidence.

The verifier fails closed when a required device profile is missing, WebGPU high
does not target 60 fps, WebGL2 low does not target 30 fps, sustained duration is
under 60 minutes, one-minute observations are incomplete, min or average FPS
drops below target, p95/p99 frame time exceeds the renderer budget, dropped
frames exceed 0.5%, thermal throttling occurs, or the engine, app, and
Playwright evidence paths are not wired.
