{"record":{"id":"65619f8a0745a314","repo":"openai/codex","slug":"features-multi-agent-v2-default-wait-timeout-ms-mu-65619f","errorCode":null,"errorMessage":"features.multi_agent_v2.default_wait_timeout_ms must be at most features.multi_agent_v2.max_wait_timeout_ms","messagePattern":"features\\.multi_agent_v2\\.default_wait_timeout_ms must be at most features\\.multi_agent_v2\\.max_wait_timeout_ms","errorType":"validation","errorClass":"std::io::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/core/src/config/mod.rs","lineNumber":3740,"sourceCode":"        )?;\n        validate_multi_agent_v2_wait_timeout(\n            \"features.multi_agent_v2.default_wait_timeout_ms\",\n            multi_agent_v2.default_wait_timeout_ms,\n        )?;\n        if multi_agent_v2.min_wait_timeout_ms > multi_agent_v2.max_wait_timeout_ms {\n            return Err(std::io::Error::new(\n                std::io::ErrorKind::InvalidInput,\n                \"features.multi_agent_v2.min_wait_timeout_ms must be at most features.multi_agent_v2.max_wait_timeout_ms\",\n            ));\n        }\n        if multi_agent_v2.default_wait_timeout_ms < multi_agent_v2.min_wait_timeout_ms {\n            return Err(std::io::Error::new(\n                std::io::ErrorKind::InvalidInput,\n                \"features.multi_agent_v2.default_wait_timeout_ms must be at least features.multi_agent_v2.min_wait_timeout_ms\",\n            ));\n        }\n        if multi_agent_v2.default_wait_timeout_ms > multi_agent_v2.max_wait_timeout_ms {\n            return Err(std::io::Error::new(\n                std::io::ErrorKind::InvalidInput,\n                \"features.multi_agent_v2.default_wait_timeout_ms must be at most features.multi_agent_v2.max_wait_timeout_ms\",\n            ));\n        }\n        validate_multi_agent_v2_tool_namespace(multi_agent_v2.tool_namespace.as_deref())?;\n        let agents_enabled = cfg\n            .agents\n            .as_ref()\n            .and_then(|agents| agents.enabled)\n            .unwrap_or(true);\n        let agent_max_threads = cfg\n            .agents\n            .as_ref()\n            .and_then(|agents| agents.max_concurrent_threads_per_session);\n        if agent_max_threads == Some(0) {\n            return Err(std::io::Error::new(\n                std::io::ErrorKind::InvalidInput,\n                \"agents.max_concurrent_threads_per_session must be at least 1\",","sourceCodeStart":3722,"sourceCodeEnd":3758,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/core/src/config/mod.rs#L3722-L3758","documentation":"The upper-bound ordering check fires when default_wait_timeout_ms exceeds max_wait_timeout_ms: the default wait would bypass the configured ceiling, so Config::load fails with InvalidInput instead of clamping. It runs after the min/max and default/min checks pass.","triggerScenarios":"Any layer combination where default_wait_timeout_ms resolves above max_wait_timeout_ms (e.g. default = 120000, max = 30000).","commonSituations":"Lowering the max to cap waits while leaving a large default; merging configs where one layer owns the default and another owns the cap.","solutions":["Lower `default_wait_timeout_ms` to at most `max_wait_timeout_ms`.","Or raise `max_wait_timeout_ms`.","Or remove `default_wait_timeout_ms` to inherit a valid default."],"exampleFix":"# before\n[features.multi_agent_v2]\ndefault_wait_timeout_ms = 120000\nmax_wait_timeout_ms = 30000\n\n# after\n[features.multi_agent_v2]\ndefault_wait_timeout_ms = 30000\nmax_wait_timeout_ms = 120000","handlingStrategy":"validation","validationCode":"import tomllib\nma = tomllib.load(open(\"config.toml\", \"rb\")).get(\"features\", {}).get(\"multi_agent_v2\", {})\nd, mx = ma.get(\"default_wait_timeout_ms\"), ma.get(\"max_wait_timeout_ms\")\nassert d is None or mx is None or d <= mx, \"default_wait_timeout_ms must be <= max_wait_timeout_ms\"","typeGuard":null,"tryCatchPattern":"match config_result {\n    Err(ref e) if e.kind() == std::io::ErrorKind::InvalidInput\n        && e.to_string().contains(\"default_wait_timeout_ms must be at most\") => {\n        // lower the default or raise the max, then retry\n    }\n    other => other,\n}","preventionTips":["When capping max_wait_timeout_ms, re-check the default against the new cap","Assert the full ordering min<=default<=max in config generation","Keep timeout knobs in one layer so overrides cannot split the triple"],"tags":["codex","config","multi-agent","timeouts"],"backgroundTag":"min-max-config-mismatch","analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}