{"record":{"id":"164a35d80f418bf0","repo":"openai/codex","slug":"features-multi-agent-v2-min-wait-timeout-ms-must-b","errorCode":null,"errorMessage":"features.multi_agent_v2.min_wait_timeout_ms must be at most features.multi_agent_v2.max_wait_timeout_ms","messagePattern":"features\\.multi_agent_v2\\.min_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":3728,"sourceCode":"            return Err(std::io::Error::new(\n                std::io::ErrorKind::InvalidInput,\n                \"features.multi_agent_v2.max_concurrent_threads_per_session must be at least 1\",\n            ));\n        }\n        validate_multi_agent_v2_wait_timeout(\n            \"features.multi_agent_v2.min_wait_timeout_ms\",\n            multi_agent_v2.min_wait_timeout_ms,\n        )?;\n        validate_multi_agent_v2_wait_timeout(\n            \"features.multi_agent_v2.max_wait_timeout_ms\",\n            multi_agent_v2.max_wait_timeout_ms,\n        )?;\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","sourceCodeStart":3710,"sourceCodeEnd":3746,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/core/src/config/mod.rs#L3710-L3746","documentation":"After each wait timeout in `[features.multi_agent_v2]` passes its individual bound check, Config enforces ordering: min_wait_timeout_ms must not exceed max_wait_timeout_ms. A minimum larger than the maximum is contradictory, so loading fails with InvalidInput instead of clamping.","triggerScenarios":"Any layer combination resolving to min_wait_timeout_ms > max_wait_timeout_ms (e.g. min = 60000, max = 5000). Both values are individually valid; only their order is wrong.","commonSituations":"Tuning one bound and forgetting its pair; copy-paste between environments with different latency profiles; layered configs where one layer raises the min and another lowers the max.","solutions":["Raise `max_wait_timeout_ms` to at least `min_wait_timeout_ms` (or lower the min).","Prefer deleting both keys to accept defaults when custom bounds are not required.","Re-check units; all three timeouts are milliseconds."],"exampleFix":"# before\n[features.multi_agent_v2]\nmin_wait_timeout_ms = 60000\nmax_wait_timeout_ms = 5000\n\n# after\n[features.multi_agent_v2]\nmin_wait_timeout_ms = 5000\nmax_wait_timeout_ms = 60000","handlingStrategy":"validation","validationCode":"import tomllib\nma = tomllib.load(open(\"config.toml\", \"rb\")).get(\"features\", {}).get(\"multi_agent_v2\", {})\nmn, mx = ma.get(\"min_wait_timeout_ms\"), ma.get(\"max_wait_timeout_ms\")\nassert mn is None or mx is None or mn <= mx, \"min_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(\"min_wait_timeout_ms must be at most\") => {\n        // fix the ordering, then reload config\n    }\n    other => other,\n}","preventionTips":["Edit min/max/default timeouts as a triple, never singly","Encode the min<=default<=max invariant in config-generation code","Keep related timeout knobs in one config layer to avoid merge surprises"],"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"}