{"record":{"id":"4681da336fb0877b","repo":"openai/codex","slug":"animation-name-fps-must-be-finite-and-between-0","errorCode":null,"errorMessage":"animation {name} fps must be finite and between 0 and {MAX_ANIMATION_FPS}, got {fps}","messagePattern":"animation (.+?) fps must be finite and between 0 and (.+?), got (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/tui/src/pets/model.rs","lineNumber":413,"sourceCode":"        return Ok(animations);\n    }\n\n    for (name, spec) in specs {\n        if spec.frames.is_empty() {\n            bail!(\"animation {name} must include at least one frame\");\n        }\n        for sprite_index in &spec.frames {\n            if *sprite_index >= frame_count {\n                bail!(\n                    \"animation {name} references sprite index {sprite_index}, but pet has {frame_count} frames\"\n                );\n            }\n        }\n\n        let fps = match spec.fps {\n            Some(fps) if fps.is_finite() && fps > 0.0 && fps <= MAX_ANIMATION_FPS => fps,\n            Some(fps) => {\n                bail!(\n                    \"animation {name} fps must be finite and between 0 and {MAX_ANIMATION_FPS}, got {fps}\"\n                );\n            }\n            None => 8.0,\n        };\n        let duration = Duration::from_secs_f64(1.0 / fps);\n        let fallback = if spec.fallback.is_empty() {\n            \"idle\".to_string()\n        } else {\n            spec.fallback\n        };\n        let loop_start = spec\n            .loop_animation\n            .unwrap_or(/*default*/ true)\n            .then_some(/*loop_start*/ 0);\n\n        animations.insert(\n            name,","sourceCodeStart":395,"sourceCodeEnd":431,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/tui/src/pets/model.rs#L395-L431","documentation":"Error \"animation {name} fps must be finite and between 0 and {MAX_ANIMATION_FPS}, got {fps}\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/tui/src/pets/model.rs:413 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}